Комментарии 67
Меня поражает мощь и блеск qemu, потрясающий инструмент. Спасибо большое за статью!
А как там насчет прокинуть в macOS usb или bluetooth?
Пробовал через https://github.com/foxlet/macOS-Simple-KVM, так и не удалось подружить с iPhone.Я правильно понимаю, что в xcode можно таким образом собирать и публиковать приложения для iOs?
Да, я отправляю билды приложений с такой виртуалки на айфон, все работает)
Для этого в OpenCore-Boot.sh надо добавить строку:
-device usb-host,bus=ehci.0,vendorid=0x05ac,productid=0x12a8,guest-reset=false,id=iphone
Не погружался в подробности этих параметров, но vendorid это айдишник Apple, productid это айдишник для iPhone. Есть пара нюансов: после вставки шнура в порт USB нужно нажать Trust на телефоне до запуска виртуалки и второе - у меня не получалось использовать одновременно использовать проводную мышь и держать подключенный айфон. Видимо, если в другие USB-порты подключено что-то еще, оно перебивает шину. Но я не спец
Подробнее можно почтитать здесь: https://github.com/arindas/mac-on-linux-with-qemu/issues/25
Я передаю целый USB порт - подключать и отключать можно что хочешь. Не очень известная опция: -device usb-host,hostbus=1,hostport=7,bus=usb.0
lsusb даст понять какие есть bus и port на хосте, а опцию bus можно убрать или поставить тот который у вас задан в VM
Раньше мне часто приносили прошить или анлокнуть смартфоны и планшеты, и если с андроидом всё ок, то для фблочек нужно было поднимать виртуалку с масдаем или макосью. Я прокидывал usb устройство внутрь виртуалки и нормально шил, но дело в том что загруженное в ос, загруженное в рекавери и выключенное устройстов apple это три разных девайса и приходилось делать лишние телодвижения..
Жаль что этого коммента мне не попалось лет 10 назад..
Но всё равно спасибо вам, буду знать (и ведь вроде не раз доку на qemu читал по разным причинам, а такого варианта даже не встретил и сам не додумался).
Виртуалка-то видит телефон, а XCode - нет.
Только это нелегально с юридической точки зрения (виртуалки и макхаки - нельзя).
Чтобы легально делать продукты для эппл - нужна железка эпл (б/у мак мини найти за $150 вполне реально) + рега в apple developer ($100 в год), чтобы подписывать, нотаризовать и степлерить свои криативы(отдельный квест), и выкладывать их в app store.
от куда такая инфа? я когда первый хакинтош ковырял общался с саппортом меня конкретно интересовал вопрос того на сколько это законно, на что чувак ответил примерно следующее
"Мы знаем о том что многие используют ОС на своих компьютерах и не ведем охоту на ведьм, все в порядке пока вы не пытаетесь делать бизнес на продаже своих кастомных компьютеров с нашей ОС как настоящие маки, пользуйтесь на здоровье мы уверенны что вам понравится и вы пожелаете приобрести себе настоящий мак"
это все сжато там был довольно развернутый ответ еще упоминал что при возникновении каких либо проблем тех.поддержка может проигнорировать запрос, это было по моему во времена Каталины
Есть ещё ряд вариантов с арендой макожелеза в облаке, в диапазоне от $25 за месяц. Правда, не знаю, можно ли с такого железа что-то выкладывать в аппстор.
Как с производительностью решения? Есть видео как бегает xcode?
Для начала бы увидеть, как икскод на родном ябловском железе бегает
Я запускал через VMWare из-под windows на i7-11370 + 32GBRAM и оно весьма тормозило.
"Мне Мойша по телефону напел"
"Весьма" - это очень мягко сказано :)
Запускал под qemu (Proxmox) и вроде достаточно нормально работала. У меня виртуалка на своём отдельном SSD, который выделен только для OSX. Вроде как это даёт небольшой прирост к скорости на i/o.
Вообще, XCode сама по себе не из торопливых приложений даже на родном железе. При возможности я кодил в VSC, а собирал и гонял тесты в XCode.
И как примерно он бегает?
Ну скажем так - не очень торопливо. На учебных проектах из песочницы норм даже на эйрах, но с ростом проекта естественно скорость снижается. И ладно у меня мак мини, но коллега сидит на мак студии с полным фаршем, и у него тоже скорость икскода так себе. При этом с остальным софтом проблем особых не замечал (ну я конечно не весь софт в мире использую).
Проблема усугубляется, когда в большом проекте очень грязный код - большие файлы, излишняя связанность, нет модификаторов доступа (то есть по умолчанию всё открыто) - индексирование проекта, автоподсказки, подсветка страдают. Правда и такого бардака, как в моём нынешнем проекте, я больше нигде не видел.
Плохо бегает. Собирал хакинтош для целей звукозаписи и не только, и в целом он работал значительно производительней мака взятого за образец. Logic и Final Cut очень хорошо работали. Решил посмотреть ради интереса на Xcode, так вот он тормозил настолько, что всякие идеи тратить время в нём на перенос чего-нибудь в эко-систему macOS развеялись сразу. Надо очень любить мак чтобы этим пользоваться, а если ещё и на оригинальном железе...)
Если не хотите, чтобы оно тормозило, надо пробрасывать дискретную GPU в виртуалку через VT-d.
Также в упомянутом в статье репозитории неграмотно настроен эмулируемый процессор. С -cpu Penryn вместо host или хотя бы Haswell XNU будет загружать Mach-O только в режиме архитектуры x86_64, а не x86_64h, что приведёт к тому, что не во всех системных библиотеках будут работать оптимизации AVX 2.0, а это дополнительно снижает производительность.
Была бы дискретная видеокарта...
У меня встроенная AMD Renoir, живём с тем, что есть
Вы написали в целом, или вы реально знаете как сделать, чтобы переброшенная карта подхватилась системой? Ибо сам проброс-то дело минут 5.
Я бы рекомендовал установить Monterey, чтобы пользоваться современными версиями Xcode и других инструментов.
Для последнего Xcode нужна Ventura. И только с последнего Xcode можно отправлять приложения в стор.
OpenCore
А можете внутри Geekbench запустить? Интересно насколько производительность падает относительно хоста
> В заключение упомяну, что при запуске уже установленной виртуальной машины можно столкнуться с такой проблемой
Это паника ядра, но вывод списка загруженных кекстов закрывает саму панику. Нужно в config.plist поставить PanicNoKextDump=YES (см. OpenCore Configuration.pdf), чтобы увидеть.
Мне тоже понадобился XCode для эпизодических задач. Не помню, но какой-то первый нагугленный вариант с ходу не завелся. Потом нашел OneClick macOS Simple KVM. Ничего не настраивал вроде бы — только добавил ядер и памяти до 16ГБ и пару раз уже расширял диск. Устройства не пробрасывал, интеграцию с буфером обмена тоже не делал. Процессор со встройкой (AMD Ryzen 5700G), SSD.
Особо вроде ничего не тормозит в XCode и AppCode. Единственное, что умирает на несколько секунд — это анимированная минимизация окна. Но так я делаю очень редко и лень искать, где что отключить.
Единственное, что умирает на несколько секунд — это анимированная
минимизация окна. Но так я делаю очень редко и лень искать, где что
отключить.
Посмотрите Системные настройки - Рабочий стол и Dock - Убирать в Dock с эффектом "Простое уменьшение", также могут помочь включение опций "Уменьшить движение", "Уменьшить прозрачность" в Универсальном доступе - Дисплей. Это помогает и для удалёнки, создаёт меньше перерисовок.
Круто конечно в плане поюзать, но для разработки сомневаюсь что подойдёт, например запуститься ли Swift 5.8 c последними конкуренси абилками? Хотя под линукс он и компилится, но думаю на эмулятор такое не прокатит
Но как обычно есть нюансы с работой аппстора на такой вируталке, и еще куча проблем. Оно неполноценно(например установка brew на такой машине с 16 ядрами + 48 рам занимало минут 20. Установка сертбота еще минут 40 из под этого brew), но для целей MacOS server или иного MDM решения вполне подойдет. Вполне аналогично разворачивается под проксмоксом кстати. Если не пробрасывать gpu становиться больно, причем что при прямом взаимодействии, что через vnc
Статья пришлась очень кстати, как раз собирался заняться сборкой пет-проекта под макось.
Подскажите, каким образом можно прокинуть видеокарту внутрь такой виртуалки? А то простое сворачивание окна с Geanie-эффектом всё намертво вешает на несколько секунд.
MacOS официально поддерживается в VMware Fusion и есть дрова с поддержкой графики 'VMware Tools on macOS - com.vmware.kext.VMwareGfx'
Народ ставит бесплатный VMware Workstation Player. Патчит его. Ставит MacOS и VMwareTools. Все давно отработано. Материалов в сети масса.
Есть и поддержка iCloud supported device
В VMware Workstation Player есть драйвер только с софтварным рендерингом, и его производительность плюс-минус эквивалентна virtio gpu без ускорения, который используется в QEMU, тем более, что во втором случае драйвер писали вообще в Apple. Хардварный рендеринг с пробросом виртуальной GPU Metal работает же только на macOS Host или с пробросом реальной GPU через VT-d.
Лет 8-м использую на ноутах VMware Workstation Player с виртулками MacOS в походном(командировочном) варианте.
Графикой доволен(darwin.iso darwinPre15.iso) да и сами машинки быстро бегают.
На работе VMware Fusion.
Ну а для дома Proxmox VE без MacOS
Годная дока от Mr. Macintosh: List of Mac BoardID, DeviceID, Model Identifiers & Machine Models
Хорошо работает и на AMD-ных процах:
smc.version = "0"
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"
smbios.reflectHost = "TRUE"
hw.model = "MacBookPro14,3"
board-id = "Mac-551B86E5744E2388"
А вы же в курсе, что эти действия нарушают EULA, да?
С массой звёздочек и нарушением презумпции невиновности.
Во-первых автор может запускать это на железе Apple, что легально до такой степени, что так работают в Штатах "облака маков".
Во-вторых с 1280 ГК РФ можно и на не-яблочное железо попробовать "натянуть".
Но автору бы не помешало добавить это в дисклеймер, и в корпоративной среде такие эксперименты лучше бы не ставить, если только это не забивший на международное право госсектор некоей неназванной страны
Я думал, будет что-то вроде докера... Чтобы "прямо без виртуалок".
А тут виртуалка, причём другая. В смысле, чтобы запустить - придётся сперва заглушить и выгрузить модули virtualbox.
(по секрету: под макось можно собирать с помощью ванильного clang (начиная с 13-го). С консольными приложухами вообще "на ура". На любой платформе, хоть на raspberry pi)
А тут виртуалка, причём друга
ну что значит "другая"?
самая "родная" для linux и самая адекватная (настолько что именно на qemu/kvm работает большинство хостеров)
ну а то что:
придётся сперва заглушить и выгрузить модули virtualbox
так это просто означает что вы зачем-то замусорили свою систему этими модулями
придётся сперва заглушить и выгрузить модули virtualbox.
Зачем? Qemu прекрасно работает при загруженных модулях VirtualBox.
Виртуалку virtualbox просто закрываю, после чего macOS в qemu нормально загружается. Kubuntu 22.04
Её нельзя просто закрыть. В смысле, в ней тоже идёт работа.
Когда-то так и делали - смотрели, чтобы не была запущена противоположная виртуалка, потом выгружали её модули, запускали свои и запускали свою виртуалку. И был выбор в определённый момент времени - либо работать с семейством qemu через kvm, либо с virtualbox через vbox. Оба одновременно, увы, не работали. Собственно, и сейчас не работают. Просто в тот момент, когда clang научился быть по-настоящему кросс-платформенным, надобность в этих всех виртуалках для сборки отпала (для тестов всё ещё нужны).
Virtualbox давно эмулирует Mac OS X Guests
Can VirtualBox and KVM run alongside each other?
Да, очень давно эмулирует (но тут же статья, что оно "без всяких вот этих", якобы).
И не может совместно с kvm. Что бы там ни писали на SO в вопросе 10-летней давности. Софтовая эмуляция - пожалуйста. А вот Intel-VT или AMD-V (тогда это имеет хоть какой-то смысл) - кто первый халат надел, тот и доктор.
Можете в докере: https://github.com/sickcodes/Docker-OSX
Увы.
`runs on top of QEMU + KVM`
Ну и все команды запуска это подтверждают:
`docker run -it --device /dev/kvm...`
Виртуалка в докере - это всё равно виртуалка.
Проблема в том, что если память/диск/сеть можно поделить на сотню кусков, изолировать, и каждому докеру дать по кусочку - то вот гипервизор пока что один. И если другой встал, то не факт, что вы сможете пробросить /dev/kvm.
Докер - это особый предмет. Его НЕЛЬЗЯ запустить нативно на чужой системе - потому что он подразумевает работу под линукс. Докер на винде - через wsl. Докер на маке - через маленькую виртуалку с линуксом внутри. Ни на винде, ни на маке нет нативного слоя ядра, и нет namespaces, поэтому всё только так.
Равно как и чужую систему, если это не линукс, невозможно запустить в докере. Потому что внутри у вас неизбежно будет ядро линукс.
А с запуском на Hyper-V есть какие-нить новости? Понимаю, что вероятно можно собссно описанным выше методом в Hyper-V запустить что-то линуксовое, а там уже макось, но хотелось бы более прямолинейно.
Есть некий проект https://github.com/acidanthera/MacHyperVSupport но там что-то ни разу не Далее-Далее-Profit даже для давнего гентушника ))
Это возможно установить на WSL? Было бы классно иметь все 3 ОС на одной машине.
Да, вполне себе можно. Не могу сейчас найти конкретный пример, но с похожими технологиями: https://www.youtube.com/watch?v=BxBw16OCQME
OneClick macOS Simple KVM — Installing on Windows
Сам не проверял.
Как выставить разрешение побольше, на ubuntu 22.04 сработало
How to increase screen resolution for macOS-Simple-KVM
(Thanks to passthroughpo.st and urcomputertechnics.com for the tips.)
In the macOS Finder, look for EFI in the left bar under Volumes. If it isn't visible you will have to mount it:
Open the macOS Terminal and type
diskutil list
and look for the disk/partition location of the EFI. (There may be more than one.)Type
sudo diskutil mount diskYsZ
, using the disk/partition location name where you see EFI.The EFI partition will appear in the left Finder bar under Volumes.
If you don't see anything in that volume after browsing to it, try the other ones that you found in
diskutil
.
In the EFI volume, go into the
Clover
directory and open theconfig.plist
file in the macOS text editor.There should be a section of the file that looks like this:
<key>ScreenResolution</key>
<string>1280x720</string>
Edit that to your preferred screen resolution.
Some odd/intermediate resolutions like 1366×768 may not work well. Try to stick to more common 16:9, 16:10, and 4:3 form factors.
Shut down the VM, relaunch it using
basic.sh
script and follow the following steps:
Press
Escape
key as soon as the window comes up.In the interface that comes up, select
Device Manager
->OVMF Platform Configuration
->Change Preferred
and select the correct resolution.Press
F10
to save the changes.Press
Escape
multiple times to come back to main menu, and then selectContinue
on it.
MacOS Monterey на Linux — быстро и просто?