Note
This
README
documents the new method to install macOS. The older README
isavailable here.QEMU (short for 'Quick EMUlator') is a free and open-source hosted hypervisor that performs hardware virtualization. QEMU is a hosted virtual machine monitor: It emulates central processing units through dynamic binary translation and provides a set of device models, enabling it to run a variety of unmodified guest operating systems.
This new method does not require an existing physical/virtual macOSinstallation. However, this
new method
requires internet access during themacOS installation process. This limitation may be addressed in a futurecommit.Note: All blobs and resources included in this repository are re-derivable (allinstructions are included!).
Note: Checkout ideas.md. This project can always use your help,time and attention.
Requirements
- A modern Linux distribution. E.g. Ubuntu 18.04 LTS 64-bit.
- QEMU > 2.11.1
- A CPU with Intel VT-x / AMD SVM support is required
- A CPU with SSE4.1 support is required for macOS Sierra
- A CPU with AVX2 support is required for macOS Mojave
Note: Older AMD CPU(s) are known to be problematic. AMD FX-8350 works butPhenom II X3 720 does not. Ryzen processors work just fine.
Installation Preparation
- KVM may need the following tweak on the host machine to work.To make this change permanent, you may use the following command.
- Install QEMU and other packages.This step may need to be adapted for your Linux distribution.
- Clone this repository on your QEMU system. Files from this repository areused in the following steps.
- Fetch macOS installer.You can choose your desired macOS version here. After executing this step,you should have the
BaseSystem.dmg
file in the current folder.Sample run:Attention: Modern NVIDIA GPUs are supported on HighSierra but not on Mojave(yet).Next, convert this file into a usable format. - Create a virtual HDD image where macOS will be installed. If you change thename of the disk image from
mac_hdd.img
to something else, the boot scriptswill need updating to point to the new image name. - Setup quick networking by running the following commands.Note: If
virbr0
network interface is not present on your system, it mayhave been deactivated. Try enabling it by using the following commands, - Now you are ready to install macOS
?
![Macos Macos](http://asmblr.net/scrot/2013-06-29-125624_1366x768_scrot.png)
Installation
- CLI method (primary). Just run the
boot-macOS-NG.sh
script to start theinstallation proces.If you are new to installing macOS, see the older README forhelp.For macOS Catalina, useboot-macOS-Catalina.sh
script. - GUI method (alternate - functional but needs further debugging work).
- Edit
macOS-libvirt-NG.xml
file and change the various file paths (searchforCHANGEME
strings in that file). The following command should do thetrick usually. - Create a VM by running the following command.
- Launch
virt-manager
, start themacOS
virtual machine and install macOSas usual.Note: You may need to runsudo ip link delete tap0
command beforevirt-manager
is able to start themacOS
VM.Note: You may need to remove the following block frommacOS-libvirt-NG.xml
and runvirsh --connect ...
again. Alternate easier fix: RemoveSATA Disk 3
from the macOS virtual machine invirt-manager
.
Post-Installation
- See networking notes to setup guest networking.I have the following commands present in
/etc/rc.local
.This has been enough for me so far. - To get sound on your virtual Mac, see the 'Virtual Sound Device' in notes.
- To passthrough GPUs and other devices, see these notes.
- Need a different resolution? Check out the notes included in thisrepository.
Is This Legal?
The 'secret' Apple OSK string is widely available on the Internet. It is also included in a public court document available here. I am not a lawyer but it seems that Apple's attempt(s) to get the OSK string treated as a trade secret did not work out. Due to these reasons, the OSK string is freely included in this repository.
Gabriel Somlo also has some thoughts on the legal aspects involved in running macOS under QEMU/KVM.
Motivation
My aim is to enable macOS based builds + testing, kernel debugging, reversingand security tasks in an easy, reproducible manner without needing to invest inApple's closed ecosystem (too heavily).
Backstory: I was a (poor) student in Canada once and Apple made my work oncracking Apple Keychains a lotharder than it needed to be.