Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore)

Всем привет. Делюсь своими изысканиями по запуску виртуальных машин MacOS на процессорах AMD. Возможно кому-то будет полезным:
Предыстория: в наличии несколько виртуалок, с которыми долгое время не было никаких проблем. Версии - от Mojave до Monterey, они даже обновлялись штатно. Далее, при апдейте на Ventura/Sonoma ловим кернел панику - никакие рекомендации из интернета не помогли. Глаз пал в сторону хакинтоша, но как его конфигурировать под вмварь тоже оказалось не совсем понятным, поэтому и напишу этот гайд:
вводные - Ryzen 5950X, Windows 10, VMware Workstation 16.2 (была версия 16.0, пока не столкнулись в проблемой апдейта макоси).


Что понадобится (чем пользовался лично я):
OCAT - графический редактор plist
ProperTree - еще одна редачилка plist'a, мне через нее было удобно копипастить блок с патчем для AMD (удобно открыть patches.plist из репы, и выдернуть оттуда весь блок patch, чтоб вставить его в наш конфиг)
Рекомендация по настройке конфига под амуде
Готовые SSDT для нубасов вроде меня (насколько я понял это таблицы с ID оборудования, которое инициализируется при старте ОС. Что-то подобное можно создавать самому уже на конкретном железе. У меня стоял вопрос - а каким оно должно быть и как его создать на VMware, возможно кто-то из шарящих в теме пояснит в комментах, как это работает, и как это связано с DSDT таблицами)
Гайд по EFI драйверам и кекстам - по кекстам я ниже еще отпишу. А драйвера я оставил все, которые идут с редакцией OpenCore, но не все они обязательны.
Ну и загрузчик OpenCore собственной персоной
Кастомный .vmdk диск, с которого мы будем бутаться. (создаем сами)
Выкладываю свою версию EFI - для ЛЛ, но не факт, что именно с ней у вас все взлетит.

Теперь по OpenCore, что он из себя представляет:
Нас интересует версия X64, внутри есть папка EFI, ее в дальнейшем нужно будет закинуть на наш загрузочный раздел. При включении нашей виртуалки первым делом бутается /EFI/BOOT/BOOTx64.efi, который затем запускает /EFI/OpenCore.efi (если вы будете в firmware виртуалки указывать файл загрузчика, указывайте путь к BOOTx64.efi)
Что еще внутри папки EFI :
EFI/OC/ACPI - тут лежат SSDT/DSDT таблицы оборудования. Если удалять лишнюю, обязательно нужно проверить, чтоб не было ссылок на нее в config.plist иначе будет краш.
EFI/OC/Drivers - тут лежал драйверы .efi. OpenRuntime.efi и HfsPlus.efi обязательны, я не стал удалять лишние драйвера, но ради интереса поигрался и выяснил, что без OpenCanopy.efi, OpenLinuxBoot.efi, OpenLegacyBoot.efi - загрузчик не взлетал. Насколько я понял, эти драйвера не влияют на дальнейшую работу макоси, а сугубо отвечают за работоспособность загрузчика и его возможности.
EFI/OC/Kexts - тут валяются расширения ядра (kext - kernel extension), нужны для успешного запуска самой макоси, а так же для корректной инициализации и работы устройств.
Любой хакинтош начинается с Lilu.kext, затем должен идти фейковый SMC (я заводил тачку с VirtualSMC.kext), потом уже все остальное.
Их последовательность определяется конфигом config.plist, в каком порядке они указаны, в таком они и будут инжектиться при загрузке ОС.
Экспериментальным путем выяснено, что система не бутается без:
AppleMCEReporterDisabler.kext - Required on macOS 12.3 and later on AMD systems, and on macOS 10.15 and later on dual-socket Intel systems. *из доки по OpenCore
CryptexFixup.kext - Я так понял, что это обязательный кекст не только для AMD, но и для Intel до Haswell
NoAVXFSCompressionTypeZlib-AVXpel.kext - возможно избыточно, без него тоже бутается.
На всякий случай оставил:
VoodooHDA.kext - инициализация звука в MacOS
HibernationFixup.kext - на виртуалке проще отключить сон, но если что, возможно это будет фиксить. Дело в том, что под хакинтошами у макоси есть проблемы со сном, вернее с выходом из него)
Whatevergreen.kext - фикс инициализации графики, по идее он не нужен, т.к. есть VMWARE tools


Создаем свой .vmdk:
Для его создания я создавал новую виртуалку, "установлю потом", тип системы other, диск 0.2GB, но вмварь тогда создает диск IDE, поэтому я его удалил, и пересоздал уже как SATA. Размер выбрал с потолка, сам EFI весит около 10-15 МБ. Поэтому можете назначить меньше. Из доп. настроек нужно выбрать store virtual disk as a single file
Далее монтируем этот диск через Daemon Tools. Теперь открываем оснастку управления дисками, для этого жмем WIN+R, вводим diskmgmt.msc и enter, система тут предложит проинициализировать новый диск. Выбираем GPT, жмем ОК. Далее создаем том и форматируем в FAT32, в Label вписываем любой удобный и понятный, я так и назвал OpenCore.
Все, теперь осталось закинуть на диск папку EFI, размонтировать диск и можно с него бутаться.


Несовместимость виртуалки и vmdk диска (если подкидываем к уже готовой машине)

При попытке подсунуть загрузочный vmdk в виртуалку, которая была создана в более старой версии VMware скорее всего вылезет ошибка:

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

Варианта 2: либо пересоздавать новый vmdk для этой виртуалки, форматить его и засовывать туда EFI
либо конвертнуть виртуалку:
жмем по ней правой кнопкой мыши → manage → Change Hardware Compatibility
Мой первый EFI был создан в версии 16.2.x, поэтому выбираю ее, чтоб версия совпадала с той, в которой он создавался. Далее вмварь спросит, хотите склонировать или конвертировать текущую билд-тачку. Тут уже на ваше усмотрение, у меня с конвертацией проблем не возникло, но я не уверен, что их точно не будет.
После конвертации диск подцепится без ошибок)


Что дальше?
Отныне любая макось, будь то инсталлер или уже установленная версия - должны запускаться только через наш кастомный EFI. Иначе в дальнейшем у них будет паника ядра.
С чистой установкой все просто: (не буду останавливаться на том, как создать новую ВМ, как пропатчить ее unlocker'ом, как создать диск, выделить ресурсы и т.д.)
Добавляем в виртуалку наш EFI, в настройках смотрим на какой порт сата он добавился (можно сделать SATA 0:0, а можно забить - на ваше усмотрение.
В виртуальный CD добавляем .iso образ установщика макоси (можно взять с торрента, либо зашить самому, но для этого нужен отдельный гайд).
Далее в VMware выбрать Power on firmware

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

После этого у нас будет возможность бутануться с нужного диска, тут нам и понадобиться номер порта SATA

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

мой пример: 0:0 это EFI, 2:0 это целевой диск с макосью, 1:0 CD дисковод с инсталлером.

Выбираем диск, жмем Enter.
Далее мы попадаем в меню OpenCore:

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

Скрин для примера, тут конфиг с уже установленной системой

Если нажать пробел, появятся дополнительные опции загрузки

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

OpenCore делает ВЖЖ ВЖЖ

Бутаем установщик и далее штатно проходим установку (не забываем запустить дисковую утилиту в установщике и отформатировать наш целевой vmdk в формат APFS).


Для тех, кто хочет обновить свой старенький Monterey
У вас варианта два, либо обновляться штатно, через Software Update, либо обновляться с iso (точно так же, как чистая установка в абзаце выше, но без форматирования целевого диска)
Правило одно в обоих случаях - перед апдейтом, вы должны обязательно бутаться с кастомного загрузчика. Если макось словит Kernel Panic в процессе обновления (она несколько раз рестартится пока идет процесс обновления), то ее попердолит так, что даже с подсунутым EFI она не будет бутаться.
Перед апдейтом можете снять снапшот, откат поможет в случае если что-то пойдет не так.


Какие могут быть проблемы

  • Если макось в процессе рестартов установщика загрузится не через OpenCore, а напрямую, и словит панику - ее уже будет не восстановить. (выше уже писал об этом, но лучше задублирую - это важно!)

  • Если после успешной загрузки макоси не работает мышь/клава, либо у мыши очень высокая чувствительность, что невозможно ею пользоваться - нужно проверить в настройках виртуалки версию USB контроллера. Должна быть 3.1.
    доп. может понадобиться VoodooPS2Controller.kext

  • Проброс Bluetooth лучше убрать (там же, где настройки USB)

  • Перед изменением количества ядер, выделенных виртуалке, лучше править патчи в config.plist на EFI разделе. Иначе тачка будет вставать в фриз: Патчи для AMD
    Без них будут проблемы. У меня зависало, если выделял больше 4х ядер.
    "C:\Program Files (x86)\VMware Workstation\vmrun.exe" -T ws stop "путь к виртуалке.vmx"

  • И НЕ ЗАБЫВАЕМ, ЧТО В VMX конфиг нужно прописать

    cpuid.0.eax = "0000:0000:0000:0000:0000:0000:0000:1011"
    cpuid.0.ebx = "0111:0101:0110:1110:0110:0101:0100:0111"
    cpuid.0.ecx = "0110:1100:0110:0101:0111:0100:0110:1110"
    cpuid.0.edx = "0100:1001:0110:0101:0110:1110:0110:1001"
    cpuid.1.eax = "0000:0000:0000:0001:0000:0110:0111:0001"
    cpuid.1.ebx = "0000:0010:0000:0001:0000:1000:0000:0000"
    cpuid.1.ecx = "1000:0010:1001:1000:0010:0010:0000:0011"
    cpuid.1.edx = "0000:0111:1000:1011:1111:1011:1111:1111"

    ethernet0.virtualDev = "vmxnet3"


UPD: вынесу отдельно: из непофикшеного есть проблема с рестартами виртуалки. Она успешно останавливает систему и повисает

Виртуальная машина MacOS 13+ на процессорах AMD (OpenCore) Vmware, Mac Os, Hackintosh, Windows, Windows 10, Виртуализация, Администрирование, Xcode, IT, Длиннопост

При этом кнопки Power OFF в VMware неактивны

Прибить ее можно из командной строки (путь до vmrun.exe может отличаться:
"C:\Program Files (x86)\VMware Workstation\vmrun.exe" -T ws stop "путь к виртуалке.vmx"

Лига Сисадминов

1.5K пост17.7K подписчика

Добавить пост

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

1
Автор поста оценил этот комментарий

я проблему решил именно хакинтошем, на втором компе. С настройками OpenCore заморачиваться не стал, заплатил, что-то около 1500р за готовую конфигурацию под мое железо.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У нас была немного иная цель. Именно виртуалки из-за рациональности использования 32 ядер и 128 гигов оперативы. + их можно быстро сворачивать/разворачивать удаленно, снапшотить, бекапить - в общем одни профиты)

Автор поста оценил этот комментарий

Смотря для каких целей. Вот у меня пример из поста: 32-поточный Ryzen 5950X, 128GB RAM, 2TB NVME + еще несколько виртуалок на отдельных 512 гиговых SSD сидят.
теперь вопрос: Возможно ли купить подобный мак, чтоб внутри можно было иметь много "песочниц" с макос? Сколько оно будет стоить?
Второе, если вместо подхода хост->много гостей
мы покупаем 8 макмиников, вместо 8ми гостевых ОС. Цена на актуальный миник M1/16/512 будет близка к миллиону. А версии с M2 Pro, сильно его превысят.
Проще ли купить маков на полтора миллиона, когда можно с тем же выхлопом их крутить на платформе за 150к?

раскрыть ветку (1)
Автор поста оценил этот комментарий

упд: 1 виртуалка на физическом 512 диске сидит, остальные на системном, и для тестов и бекапов на hdd

1
Автор поста оценил этот комментарий
Проще, но народ все равно задрачивает на хакинтош, что то ими же движет)
раскрыть ветку (1)
Автор поста оценил этот комментарий

Смотря для каких целей. Вот у меня пример из поста: 32-поточный Ryzen 5950X, 128GB RAM, 2TB NVME + еще несколько виртуалок на отдельных 512 гиговых SSD сидят.
теперь вопрос: Возможно ли купить подобный мак, чтоб внутри можно было иметь много "песочниц" с макос? Сколько оно будет стоить?
Второе, если вместо подхода хост->много гостей
мы покупаем 8 макмиников, вместо 8ми гостевых ОС. Цена на актуальный миник M1/16/512 будет близка к миллиону. А версии с M2 Pro, сильно его превысят.
Проще ли купить маков на полтора миллиона, когда можно с тем же выхлопом их крутить на платформе за 150к?

показать ответы
Автор поста оценил этот комментарий
Хм, не учел
раскрыть ветку (1)
Автор поста оценил этот комментарий

это чисто специфическая штука. Мы сидели на монтерее, и в ус не дули, пока не узнали, что в апреле прекращается поддержка Xcode той версии. Начали апаться, и наступили на кучу граблей. У Хакинтошного OpenCore отличная дока, но по ней не совсем очевидно как настраивать виртуалку, вот и решил написать.

У нас это билд-станции. На одну рязань 5950х + 128гб оперативы влазит много гостей) Настолько много, что покупка их макмини тупо нецелесообразна, поэтому пока они х86 поддержку не выпилили - нужно экономить) В свое время мы ушли на виртуалки, чтоб не костылить хакинтош (тогда был еще Chameleon и Clover). А теперь сразу комбо)) хакинтош в виртуалке

показать ответы
2
Автор поста оценил этот комментарий
А зачем виртуалам на макоси?
раскрыть ветку (1)
Автор поста оценил этот комментарий

например, чтоб гонять свежий Xcode, а мак покупать желания особо нет

показать ответы