How to install a macOS Catalina Virtual Machine on Linux

We love Linux, we love Open Source, we avoid all the stress caused by macOS or Windows. However, there will come a time when you need to use software for work and that software runs only on macOS or on Windows. If for Windows we don’t have big problems and we can find solutions in all the sauces, macOS things get a little complicated.

When the friend you forced to switch to Linux a while ago comes to you and asks you how to use Adobe’s corporate macOS suite on his PC, what do you do?

Some time ago it would have been very complicated and you would have convinced him to use a Windows VM to take advantage of the Adobe suite, but today things have changed.

A simple macOS VM in QEMU, accelerated by KVM

Obviously we are talking about a simple procedure that implies the use of huge hardware resources: already a Mac in itself uses powerful hardware let alone virtualize it what computing power we need. Nothing transcendental since today’s computers are thousands of times as powerful as Apollo 11 on the Moon, so let’s not worry too much.

As we said, there is a minimum CPU requirement for macOS itself: both Intel and AMD CPUs are supported, but the recommendations are Ivy Bridge (or later) Core and Xeon processors, or AMD Ryzen, AMD Threadripper, and AMD Epyc processors. You also need some disk space and the bare minimum virtual disk size would be around 20GB, but you’ll find it hard to get any apps installed. Adobe Photoshop Elements 2020, one of the most simple Adobe applications, needs 6.5GB of available hard-disk space to install and additional 2.5GB to download all optional content. So, take a look at the space you need.

You’ll need a Linux system with QEMU, python3, pip, and the KVM modules enabled. A Mac is not required.

sudo dnf install qemu qemu-img python3 python3-pip # for Fedora

sudo zypper in qemu-tools qemu-kvm qemu-x86 qemu-audio-pa python3-pip # for openSUSE

sudo apt-get install qemu-system qemu-utils python3 python3-pip # for Ubuntu

Run jumpstart.sh to download installation media for macOS (internet required). The default installation uses Catalina, but you can choose which version to get by adding either --high-sierra, --mojave, or --catalina. For example:

./jumpstart.sh --mojave

Note: You can skip this if you already have BaseSystem.img downloaded. If you have BaseSystem.dmg, you will need to convert it with the dmg2img tool.

Create an empty hard disk using qemu-img, changing the name and size to preference:

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

and add it to the end of basic.sh:

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

Note: If you’re running on a headless system (such as on Cloud providers), you will need -nographic and -vnc :0 -k en-us for VNC support.

Then run basic.sh to start the machine, first, use Disk Utility to partition the virtual disk and then install macOS.

To fine-tune the system and improve performance, look in the docs folder for more information on adding memory, setting up bridged networking, adding passthrough hardware (for GPUs), tweaking screen resolution, and enabling sound features.

For all the additional info, for the solved and opened issues and to contribute to the project, you can find all at the GitHub page: https://github.com/foxlet/macOS-Simple-KVM/.

Also, if you like simple things and SNAP, you can also use SOSUMI, the snap version of this package. Just launch SOSUMI from the terminal to monitor the initial launch setup (subsequent launches can be done via the desktop icon) and this will boot to the macOS recovery system. It’s available on snapcraft.io (https://snapcraft.io/sosumi) snap archive.

One comment

Leave a Reply

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