Emulating Linux binaries under Mac OS X
How do I run Linux binaries under Mac OS X? Googling around I found a couple of emulators but none for running Linux binaries on a Mac. There are quite a few posts about running Mac OS X on Linux and that kind of stuff — but that’s the opposite of what I want to do. Update: Thanks for all the answers! I am fully aware of MacPorts and Fink or any of the other things; and no, I do not want any of these utilities, and I do not want any of the package managers, I prefer to compile things myself. I also have Parallels and could set up virtual machines and all that jazz. The only thing I want to do is to find a way to run a binary that I do not have the source code for and has been compiled for Linux, but I do not want to run it under Linux but under Mac OS X. Therefore my question about emulators.
If your just looking to run software from the *nix/POSIX world it will probably compile provided it doesn’t depend on OS specific libraries. Fink or MacPorts can help with this somewhat.
I can’t think of any software that’s available for Linux, but not for Mac (sadly, since I’m a Linux guy). Why are you looking for such a thing?
Great question! I too, have a piece of enterprise software that runs in Linux, but my development machine is a Mac. Hopefully someone comes up with a solution — emulation layer for Linux binaries on Mac.
7 Answers 7
Well there is a project introducing something like Linux’s binfmt_misc to OS X so now what you need is an ELF loader, a dynamic linker that can load both Mach-O and ELF, and some mechanism to translate Linux calls to OS X ones.
Just for inspiration, you can implement the dynamic linker in the fashion that it ignores filename extension — both libfoo.so.1 (as an Linux ELF) and libfoo.1.dylib (as an Mach-O) can be loaded so that OS X versions of system libraries can be reused so that you do not need to write a «hosted on OS X» libc.so and syscalls can be handled by an kext that translates Linux calls to OS X ones in kernel.
Or, in an more elegant way, implement a stripped down Linux kernel as a kext that makes the OS X kernel a dual-purpose. However that will require you to use two sets of libraries. (Binaries do not clash so it is largely okay)
Как получить быструю виртуальную macOS Ventura в линуксе
Ничего сильно нового или необычного в процессе нет, тема старая и рабочая. Руководств, наборов скриптов и всяких гайдов в интернете также уже куча, я остановился вот на этом. Все манипуляции производились на ноутбуке Dell G3,с 32Гб памяти и SSD.
Настоятельно рекомендую также использовать что-то производительное, поскольку macOS (тем более последняя) чрезвычайно прожорливая.
Еще вам будет нужно ~50Гб свободного места на диске. Я использовал Mageia Linux, официальный гайд от авторов руководства — для Ubuntu. Но коль уж вы залезли так далеко, что собираетесь разворачивать виртуальный мак на линуксе — полагаю вам уже глубоко похер на дистрибутив.
Подготовка
Устанавливаем вот этот параметр:
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
В репозитории проекта есть готовая настройка modprobe для постоянной настройки:
sudo cp kvm.conf /etc/modprobe.d/kvm.conf # for intel boxes only, after cloning the repo below
Устанавливаем пакеты. Для убунты:
sudo apt-get install qemu uml-utilities virt-manager git \ wget libguestfs-tools p7zip-full make dmg2img -y
urpmi qemu git wget virt-manager libguestfs-tools libgu p7zip make dmg2img
Добавляем своего пользователя в группы, для использования KVM:
sudo usermod -aG kvm $(whoami) sudo usermod -aG libvirt $(whoami) sudo usermod -aG input $(whoami)
Нужно будет выйти из сессии для применения этих изменений. Клонируем репозиторий со скриптами:
git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git cd OSX-KVM
Тут будет текстовое меню выбора версии:
1. High Sierra (10.13) 2. Mojave (10.14) 3. Catalina (10.15) 4. Big Sur (11.7) - RECOMMENDED 5. Monterey (12.6) 6. Ventura (13) Choose a product to download (1-6): 4
Нужно будет выбрать Ventura.
Конвертируем в RAW-образ, который может читать Qemu:
dmg2img -i BaseSystem.dmg BaseSystem.img
Создаем виртуальный диск, на который виртуальная MacOS будет установлена:
qemu-img create -f qcow2 mac_hdd_ng.img 128G
Установка
Дальше запускается уже графический инсталлятор, пошаговые картинки из которого есть в оригинальной статье. Тут привожу лишь текстовое описание.
Выбираем иконку с диском и нажимаем «Enter». Выбираем «Disk Utility».
Выбираем созданный выше образ диска и форматируем.
Поскольку MacOS поставляется с оборудованием Apple, чистой пользовательской установки не существует, поэтому в меню оно называется «Reinstall», т. е. «Переустановка».
Соглашаемся и клянемся соблюдать лицензионное соглашение, во славу Луны .
Выбираем отформатированный диск.
Пропускаем Apple ID, его можно установить позже.
Настройка сети
Вот таким скриптом создается виртуальный адаптер:
#!/usr/bin/env bash sudo ip tuntap add dev tap0 mode tap sudo ip link set tap0 up promisc on sudo ip link set dev virbr0 up sudo ip link set dev tap0 master virbr0
Который подцепляется Qemu при запуске.
Для Ventura будет необходимо модифицировать скрипты запуска OpenCore-Boot* :
# -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27 -netdev user,id=net0 -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
Там же я добавил пару параметров для решения проблем с размером экрана:
-monitor stdio -device VGA,vgamem_mb=128
Только в следующий раз обрати внимание, что теги разделяются запятыми. Если поставить пробелы, движок ЛОРа попытается эту конструкцию воспринять как один тег (разумеется, несуществующий).
Ок, я буду тогда текстовые версии выкладывать дальше, как в свежем скрине про сборку дотнета.
Ничего про проброс видео( Баловство.
sudo cp kvm.conf /etc/modprobe.d/kvm.conf # for intel boxes only, after cloning the repo below
А есть инструкция для AMD? Или если у тебя AMD ты просто не запускаешь эту инструкцию?
Unixson ★ ( 22.03.23 14:13:47 MSK )
Последнее исправление: Unixson 22.03.23 14:14:11 MSK (всего исправлений: 1)
эмм, такой вопрос.
то что скачивается BaseSystem.dmg ~650mb это нормально?
просто со времен пика популярности hackintosh»ей, ванильная весила как минимум ~5гб, а уж всякие iAtkos’ы и того более.
вероятно, оно в процессе докачает что необходимо?-.-
Да, это настройка специфичная для процессоров Intel.
то что скачивается BaseSystem.dmg ~650mb это нормально?
Да, после конвертации dmg2img будет больше.
оно в процессе докачает что необходимо?
За наводку спасибо, но оно внутри на том же самом OSX-KVM:
quickemu will automatically download the required OpenCore bootloader and OVMF firmware from OSX-KVM.
Optimised by default, but no GPU acceleration is available. Host CPU vendor is detected and guest CPU is optimised >accordingly. VirtIO Block Media is used for the system disk where supported. VirtIO usb-tablet is used for the mouse. VirtIO Network (virtio-net) is supported and enabled on macOS >Big Sur and newer but previous releases use vmxnet3. VirtIO Memory Ballooning is supported and enabled on macOS Big >Sur and newer but disabled for other support macOS releases. USB host and SPICE pass-through is: UHCI (USB 2.0) on macOS Catalina and earlier. XHCI (USB 3.0) on macOS Big Sur and newer. Display resolution can only be changed via macOS System >Preferences. Full Duplex audio requires VoodooHDA OC or pass-through a USB >audio-device to the macOS guest VM. NOTE! Gatekeeper and System Integrity Protection (SIP) need to be disabled to install VoodooHDA OC File sharing between guest and host is available via virtio-9p >and SPICE webdavd. Copy/paste via SPICE agent is not available on macOS.
If you see «Your device or computer could not be verified» when you try to login to the App Store, make sure that your wired ethernet device is en0. Use ifconfig in a terminal to verify this.
If the wired ethernet device is not en0, then then go to System Preferences -> Network, delete all the network devices and apply the changes. Next, open a terminal and run the following:
sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist Now reboot, and the App Store should work.
Про аппстор видимо надо добавить в статью.
Будни программиста
В этой статье я хочу рассказать и показать как создать и запускать виртуальную машину с Ubuntu 20l.10 при помощи QEMU на MacOs (BigSur).
Что такое QEMU
Quick EMUlator (QEMU) это эмулятор «железа» с открытым исходным кодом (лицензия GPLv2), который для ускорения работы виртуальных машин может использовать различные акселераторы. На Linux это KVM, который встроен в ядро операционной системы, На MacOS — это HVF. На сайте QEMU утверждается, что производительность виртуальных машин на основе QEMU близка к производительности таких машин на физическом железе. Давате проверим :).
Устанавливаем QEMU
Установить QEMU на MacOS можно разными способами. У меня стоит Homebrew, с его помощью я и установил QEMU
Проверить, установлен ли QEMU можно запросив версию программы.
Если установка закончилась успешно, то вы получите что-то вроде такого сообщения.
Дополнительное приседание на Big Sur
Идем дальше. Для корректной работы QEMU на Big Sur его надо вначале «пропатчить».Для этого создайте файл entitlements.xml с таким вот содержимым
Далее надо подписать qemu-system-x86_64 этим файлом
codesign -s — —entitlements entitlements.xml —force /usr/local/bin/qemu-system-x86_64
Теперь qemu-system-x86_64 готова для работы на Big Sur
Создание виртуальной машины с Ubuntu 20.10
Теперь переходим к созданию виртуальной машины для Ubuntu. Для инсталляции Ubuntu на виртуальную машину потребуется ее дистрибутив в формате ISO, который можно скачать с официального сайта. Предположим, что он у нас находится в директории qemu-ubunut20. Все последующие команды я буду выполнять из этой директории.
Далее для инсталляции Ubuntu нам потребуется создать файл диска виртуальной машины, где Ubuntu будет установлена. Я буду использовать формат QCOW2 и создам файл на 15 Гб. Он не будет занимать сразу 15 Гб, он изначально будет значительно меньше однако его предел — 15 Гб. Это значение можно будет изменить позже. Для создания файла диска воспользуемся командой
qemu-img create -f qcow2 ubuntu-20.10-desktop-amd64.qcow2 15G
Установка Ubuntu
Как только файл диска готов можно запустить виртуальную машину с подключённым QCOW2 диском и ISO-образом Ubuntu вот такой вот командой
Давайте разберем параметры этой команды
- machine — Эмулируемая машина и тип акселератора. q35 — это один из последних типов машин, а HVF — это акселератор для MacOS.
- smp — Число процессоров для виртуальной машины
- m — Размер оперативной памяти для виртуальной машины
- hda — Ссылка на файл диска
- cdrom — Ссылка на ISO-файл
- vga — Графическая карта
- usb — Разрешает доступ к USB-порту
- device — Добавляем «usb-tablet» как устройство ввода, иначе мышь может не заработать 🙂
- display — Включаем отображение курсора мыши на экране. Отключено по умолчанию.
После загрузки виртуальной машины запустится инсталлятор Ubuntu.
По окончанию инсталляции Ubuntu система предложит перезагрузиться. Вместо этого лучше закройте терминал с QEMU по Ctrl+C на MacOS.
Запуск Ubuntu
Теперь для запуска виртуальной машины нам больше не нужен файл ISO-образа Ubuntu. По этому немного модифицируем команду запуска виртуальной машины, убрав из нее параметр cdrom. Команда для запуска достаточно объёмная, советую скопировать ее в sh-файл и хранить его в том же директории где и файл виртуальной машины. Так будет удобнее запускать. Для этого создаем файл скрипта командой
Копируем содержимое в файл run.sh
Далее надо сделать файл скрипта исполняемым
Теперь можно запустить скрипт для старта виртуальной машины