How To run macOS on KVM / QEMU

How To run macOS on KVM / QEMU


MacOS is a proprietary graphics operating system developed by Apple Inc. Since 2001. It is the primary operating system for Apple Mac computers. It is the second most used desktop operating system, after Microsoft Windows. In this article, we will see how you can run or install macOS on QEMU, accelerated by KVM.

For this setup, we will use the macOS-Simple-KVM project code available on Github to run macOS on KVM / QEMU. In order for you to run macOS on QEMU / KVM, you need a Linux system with qemu, python3, pip and the KVM modules enabled.

Step 1: Preparing The Environment

Let’s start by making sure we have the dependencies installed and the service required to run macOS in KVM running.

Linux based on Ubuntu / Debian:

sudo apt update
sudo apt -y install qemu-kvm libvirt-daemon qemu-system qemu-utils python3 python3-pip bridge-utils virtinst libvirt-daemon-system virt-manager

Secure the Vhost_net The module is loaded and enabled.

$ sudo modprobe vhost_net 
$ lsmod | grep vhost
vhost_net              24576  0
tun                    49152  1 vhost_net
vhost                  49152  1 vhost_net
tap                    28672  1 vhost_net

$ echo vhost_net | sudo teaa -a /etc/modules 

Fedora Linux:

sudo dnf -y install git bridge-utils libvirt virt-install qemu-kvm qemu qemu-img python3 python3-pip virt-manager

Start KVM:

sudo systemctl start libvirtd
sudo systemctl enable libvirtd
sudo dnf -y install virt-manager

After installation verify that Kernel modules are loaded

$ lsmod | grep kvm
kvm_intel 233472 0
kvm 737280 1 kvm_intel

I recommend that you configure virt-manager as a non-root user so that you can use it for other purposes without sudo.

Arch Linux / Manjaro:

sudo pacman -S qemu virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat python python-pip ebtables iptables

After installation is complete, start and enable Libvirtd Service to start at startup:

sudo systemctl enable libvirtd.service
sudo systemctl start  libvirtd.service

Step 2: Download The Installation Media For MacOS

Make sure you have git installed.

--- Ubuntu / Debian ---
$ sudo apt -y install git

--- Fedora ---
$ sudo dnf -y install git

Then clone the project code in Github .

git clone

Change to the downloaded directory.

cd macOS-Simple-KVM

Run the installation script to download the installation media for macOS (internet required).

./ --catalina

The default installation uses Katherine , but you can choose which version to get by adding -high saw , -mojave Or -Katherine .

Example of installation output:

dmg2img v1.6.7 (c) vu1tur ([email protected])

/var/home/jkmutai/Downloads/macos/macOS-Simple-KVM/tools/FetchMacOS/BaseSystem/BaseSystem.dmg --> /var/home/jkmutai/Downloads/macos/macOS-Simple-KVM/BaseSystem.img

opening partition 0 ...             100.00%  ok
opening partition 1 ...             100.00%  ok
opening partition 2 ...             100.00%  ok
opening partition 3 ...             100.00%  ok
opening partition 4 ...             100.00%  ok
opening partition 5 ...             100.00%  ok
opening partition 6 ...             100.00%  ok
opening partition 7 ...             100.00%  ok

Archive successfully decompressed as /var/home/jkmutai/Downloads/macos/macOS-Simple-KVM/BaseSystem.img

The directory will have contents like this:

$ ls -l
total 2.1G
-rw-------. 1 jkmutai jkmutai 2.0G Mar 20 17:15 BaseSystem.img
-rwx------. 1 jkmutai jkmutai 1.1K Mar 20 17:10
drwx------. 2 jkmutai jkmutai 4.0K Mar 20 17:10 docs
-rw-------. 1 jkmutai jkmutai  13M Mar 20 17:10 ESP.qcow2
drwx------. 2 jkmutai jkmutai 4.0K Mar 20 17:10 firmware
-rwx------. 1 jkmutai jkmutai 1.5K Mar 20 17:10
-rwx------. 1 jkmutai jkmutai  874 Mar 20 17:10
-rwx------. 1 jkmutai jkmutai  732 Mar 20 17:10
-rw-------. 1 jkmutai jkmutai 3.0K Mar 20 17:10
drwx------. 4 jkmutai jkmutai 4.0K Mar 20 17:10 tools
-rwx------. 1 jkmutai jkmutai  946 Mar 20 17:10

Step 3: Start The Machine And Install MacOS

We need to create an empty hard drive for macOS system using Qemu-img .

$ Qemu-img create -f qcow2 macOS.qcow2 50G 
Formatting 'macOS.qcow2', fmt=qcow2 size=53687091200 cluster_size=65536 lazy_refcounts=off refcount_bits=16

Modify the File and add the following lines to the end.

-drive id=SystemDisk,if=none,file=macOS.qcow2 
-device ide-hd,bus=sata.4,drive=SystemDisk 

Now we can run the command:


Click on Mac OS Icon to install the macOS base system.

The installer will start in a few seconds.

How To run macOS on KVM / QEMU

Select ” Disk Utility “on the next screen.

How To run macOS on KVM / QEMU

Format the disk you had created to install the macOS base system.

How To run macOS on KVM / QEMU

The disk should show the partition size and type after formatting.

How To run macOS on KVM / QEMU

Close the disk utility and choose ” Reinstall macOS

How To run macOS on KVM / QEMU

Confirm the installation of the operating system by pressing the button ” Follow “button.

How To run macOS on KVM / QEMU

Select the previously partitioned disk.

How To run macOS on KVM / QEMU

Please be patient when installation begins; It can be time consuming depending on internet speed.

How To run macOS on KVM / QEMU

Step 4: Import The Configuration Into Virt-Manager

Instead of QEMU, you would like to import the configuration to Virt-Manager For further configuration, just run:

sudo ./ --add

After executing the above command, add MacOS.qcow2 As storage in the properties of the newly added entry for VM.

To tune the system and improve performance, read the project documents for more information. Here are the direct links.

We will upload more content on macOS and its administration. See more guides to see.

Run Ansible Playbook with Vagrant up

How to optimize Linux system performance with tuned-adm

The best Linux books for beginners and experts

Install / run Fedora CoreOS (FCOS) on KVM / OpenStack

Videoconferencing: How to look professional in web meetings

Previous article

Arch Linux Easy and Fast Installation With Archfi

Next article

You may also like


Leave a reply

Your email address will not be published. Required fields are marked *

More in Internet