Run El Capitan, macOS Sierra, High Sierra and Mojave on QEMU/KVM. No support is provided at the moment.
Switch branches/tags
Nothing to show
Clone or download
Permalink
Failed to load latest commit information.
.github Some assorted minor updates Jun 25, 2017
HighSierra August-2018 batch update Aug 21, 2018
Mojave Batch Update for September, 2018 Oct 2, 2018
UEFI Misc. updates Feb 23, 2018
backup May-2018 updates May 11, 2018
kexts Few updates and tweaks Sep 2, 2017
pbzx-src PoC v6 (2017-02-04) Feb 4, 2017
screenshots Few updates and tweaks Sep 2, 2017
scripts Add USB passthrough notes Aug 16, 2017
.gitignore Borrow tweaks from various forks Jul 18, 2018
CREDITS.md Batch Update for September, 2018 Oct 2, 2018
Clover.qcow2 August-2018 batch update Aug 21, 2018
OVMF-notes.txt August-2018 batch update Aug 21, 2018
OVMF_CODE.fd Update OVMF to August, 2018 version Aug 21, 2018
OVMF_VARS-1024x768.fd May-2018 updates May 11, 2018
OVMF_VARS.fd May-2018 updates May 11, 2018
README.md Assorted minor updates Dec 15, 2017
SmcDumpKey.c Modernize multiple components Aug 11, 2017
boot-clover.sh Borrow tweaks from various forks Jul 18, 2018
boot-macOS-HS.sh August-2018 batch update Aug 21, 2018
boot-macOS-Mojave.sh August-2018 batch update Aug 21, 2018
boot-macOS.sh Initial support for macOS High Sierra Oct 6, 2017
boot-passthrough.sh Modernize multiple components Aug 11, 2017
create_install_iso.sh Modernize multiple components Aug 11, 2017
enoch_rev2898_boot Few updates and tweaks Sep 2, 2017
enoch_rev2902_boot Initial support for macOS High Sierra Oct 6, 2017
kernel-debugging-notes.txt Few updates and tweaks Sep 2, 2017
kvm.conf Modernize multiple components Aug 11, 2017
macOS-HS-libvirt.xml Batch Update for September, 2018 Oct 2, 2018
macOS-libvirt.xml Various fixes and updates Apr 7, 2017
networking-qemu-kvm-howto.txt Batch Update for September, 2018 Oct 2, 2018
notes-for-self.md Add some notes for myself Feb 7, 2017
notes.md Add notes on higher UEFI resolution Feb 24, 2018
org.chameleon.Boot.plist Fix case in org.chameleon.Boot.plist and smbios.plist filenames. Apr 8, 2017
parse_pbzx.py Modernize multiple components Aug 11, 2017

README.md

Note

For macOS High Sierra, follow README.md for High Sierra. Consult this document for debugging and general tips.

See the debugging section below and closed issues before opening a new issue.

Host System Details

Known to work on:

  • Ubuntu 15.10 running on i5-6500 CPU.

  • Ubuntu 16.10 running on i7-3960X CPU.

  • Fedora 24 running on i5-6500 + i7-6600U CPU.

Tested with QEMU 2.4.1, 2.5, 2.6.1, and 2.8.

AMD CPU(s) are known to be problematic. AMD FX-8350 works but Phenom II X3 720 does not. A CPU with SSE4.1 support is required for macOS Sierra.

Intel VT-x / AMD SVM is required.

Installation Preparation

Preparation steps on your current OS X / macOS

  • Download OS X El Capitan or macOS Sierra installer from Apple App Store.

  • Clone this repository. Files included in this repository are needed for ISO creation.

    git clone https://github.com/kholia/OSX-KVM.git
    
  • Run the ISO creation script create_install_iso.sh included in this repository. Run it with sudo.

    This script supports specifying the path to OS X / macOS installation application manually via the -a option.

  • Copy the generated ISO from your Mac to your QEMU/KVM machine.

Preparation steps on your QEMU system

  • Clone this repository again on your QEMU system. Files from this repository are used in the following steps.

  • Install QEMU and other packages.

    sudo apt-get install qemu uml-utilities virt-manager
    
  • See networking notes to setup guest networking.

  • Create a virtual HDD image where the OS X operating system will be installed. If you change the name of the disk image from mac_hdd.img to something else, the boot scripts will need updating to point to the new image name. A base install of OS X needs 10 GiB of space. Adding Xcode or other large software obviously increases that requirement.

    qemu-img create -f qcow2 mac_hdd.img 64G
    

    Now you are ready to install OS X / macOS.

Installation

To install OS X, you can use the included boot-macOS.sh script for a more solid alternate to the following virsh method. Use either the boot-macOS.sh method or the following virsh / virt-manager method to install OS X / macOS.

Update: The virt-manager method is no longer recommended, and no support is provided for it.

  • Edit macOS-libvirt.xml file and change file paths for mac_hdd.qcow2 (HDD), Install_OS_X_10.11_El_Capitan.iso (bootable ISO image) and enoch_rev2839_boot suitably.

  • Create a VM by running the following command

    virsh --connect qemu:///system define macOS-libvirt.xml
    
  • Start the VM in virt-manager and hit return in the console window.

Installer Steps

  • After booting, the initial language selection should show up. screenshot_01

  • After selecting the language, fire-up the Disk Utility ... screenshot_02

  • ... and initialize the new harddisk. If this step fails and the menu bar shows "Language Chooser" then see the Debugging section below.

screenshot_03 screenshot_04

  • After disk initialization, open a terminal window (in the Utilities menu) and recursively copy the /Extra folder to the newly initialized target volume using

     cp -av /Extra "/Volumes/NewVolumeName"
  • When done, quit Terminal. screenshot_05

  • Now, you can continue with the installation as usual screenshot_06

  • When finished, the VM will reboot automatically and the first time setup continues as usual. screenshot_07

Post-Installation Recommendations

  • The boot*.sh scripts have the installation ISO listed in them but this is only required for installation. Once installation is complete, comment out the -device and -drive lines referring to MacDVD and the installation ISO.

  • Inside the guest, you may modify the /Extra/org.chameleon.Boot.plist file to change the default resolution of the virtual screen. See notes for instructions on how to do this and some limitations on the resolution choices.

  • Download a Chameleon wizard such as Chameleon Wizard or Champlist in order to generate a usable smbios.plist. This file goes into /Extra and can be used to assign a reasonable serial number to your virtual Mac. Generating this file sometimes fixes software incompatibilities that occur when the software can't determine what Apple hardware it is running on.

  • For better mouse behavior, install https://github.com/pmj/QemuUSBTablet-OSX and configure QEMU to use the "usb-tablet" absolute pointing device.

  • To get sound on your virtual Mac, see the "Virtual Sound Device" in notes.

Debugging

  • For macOS Sierra change the CPU model from core2duo to Penryn. The boot-macOS.sh script already has this change.

  • While booting from the macOS Sierra ISO installer, you might get stuck on the "Language Chooser" menu bar (with no option to launch Disk Utility). The solution is to use Ctrl+F2 and arrow keys to navigate the "macOS Installer" menu bar, and to launch the "Disk Utility".

    An alternate solution is to type Super-T (where Super is the Mac command/clover key next to the Alt key). Type this sequence multiple times until a terminal window opens up. In the termianl window type:

    diskutil list
    

    This will generate a list of all attached disks. Look for the disk with a size similar to the mac_hdd.img created in an earlier step. Once identified, note the disk number. Run a command to initialize the filesystem.

    diskutil eraseDisk JHFS+ <name of disk> <disk#>
    

    For example: diskutil eraseDisk JHFS+ SYS disk2

    Then select your language and click the forward arrow to move to the next step.

  • Host machine may need the following tweak for this to work,

    echo 1 > /sys/module/kvm/parameters/ignore_msrs
    
  • Type the following in the bootloader if the guest VM fails to boot (some older ISO images may require this),

    "KernelBooter_kexts"="Yes" "CsrActiveConfig"="103"
    
  • If you see "hdiutil: attach failed - Resource busy" error message during the ISO creation step, quit the "Install macOS Sierra" program and unmount (eject) the "Install macOS Sierra" device. Disk Utility can help for unmouting disk images.

    $ hdiutil info
    $ hdiutil detach /dev/disk2  # or something similar
    
  • If the App Store doesn't work, check the notes file for instructions on how to solve this.

  • If you are getting "Dont_Steal_MacOS" related errors, see Building QEMU (recommended option) and FakeSMC installation sections in notes file.

  • If the boot process is getting stuck on the Apple logo, upgrade your host kernel and QEMU. For example, Linux 3.16.x from Debian 8 is known to be problematic, whereas Linux 4.9.x with QEMU 2.8.x works fine on the same distribution.

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.

References