How to Install Mac on Linux: A Comprehensive Guide

How to Install Mac on Linux: A Comprehensive Guide
Tux working on macbook

Are you an enthusiast of the Linux operating system who wants to experiment with macOS but not abandon your primary Linux system? In this blog post, I'll guide you through every step detailing how to install a Mac on Linux. Buckle up; it's going to be a fruitful ride!

What You Will Need

Before delving into the process, it's vital to gather the prerequisites. Here's a list of what you'll need:

  • Computer :)
  • A stable Internet connection
  • A Linux system (Any popular distribution will work, I suggest using some Debian-based distro)
  • Enough storage space
  • Patience (Trust me; you'll need it!)

The Preparation

Before we install Mac on Linux, we must first prepare the system. Disk space and partitioning are crucial at this stage, not forgetting to back up your essential files.

Installing a Virtual Machine

We're going to install macOS using a virtual machine (VM), which you can think of as a computer within a computer, sounds like Inception, right?

To install a VM on Linux, open your terminal (Ctrl+Alt+T) and input the following command:

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Provide your superuser password, and the software will install automatically.

Downloading macOS

Downloading macOS is the next step to install macOS on Linux. Unfortunately, Apple doesn't freely provide macOS ISO files like Linux distributions. However, there's a workaround. You can download macOS using a script from GitHub. Before that, ensure you have git installed in your system. You can install git using the terminal:

sudo apt-get install git

After installing git, download the script to create the macOS ISO file:

git clone https://github.com/myspaghetti/macos-guest-virtualbox.git

Creating the macOS Virtual Machine

After successfully downloading macOS, it's now time to create the macOS virtual machine. Head back to the terminal and navigate to the script directory:

cd macos-guest-virtualbox

You're ready to run the script:

./macos-guest-virtualbox.sh

Follow the prompts and be patient; the script will download the necessary packages and create a macOS virtual machine.

Wrapping Up the Installation Process

Finally, in your VM, click the + symbol to create a new virtual machine. Name the newly created system, and select the operating system Apple Mac OS X and version as macOS 10.14 Mojave (or the version you've downloaded).

GPU passthrough for acceleration

You are running macOS on your virtual machine now, congratulations! The system should boot, and you should be able to use it, but something is missing, the system is choppy and it is really uncomfortable to even navigate through it, right? The reason for this is missing GPU, the system is rendered using a software method.

Fortunately, there is a solution. If you have a graphics card made by AMD (it is possible to pass cards from other manufacturers too, but they usually don't work with Mac, so there is no point in describing the process in this tutorial), you should be able to pass through this GPU to a VM running the macOS (check the list of supported GPUs here.

silver electrical part
Photo by Backpack Studio / Unsplash

IOMMU, isolating GPU and other stuff

Ok, assuming you have the right AMD GPU model, we can proceed with the configuration.

Enable IOMMU / AMD-Vi Bios

Ensure that your CPU and motherboard support IOMMU (Input-Output Memory Management Unit) technology. For AMD CPUs, this is often referred to as AMD-Vi or IOMMU technology. This option must be enabled in the BIOS of your motherboard, it can be usually found in advanced settings or CPU configuration.

Configure grub to enable IOMMU

Edit your bootloader's kernel parameters to enable IOMMU. This typically involves adding amd_iommu=on (for AMD systems) to the GRUB configuration file (/etc/default/grub).

After editing, update GRUB with sudo update-grub or a similar command, depending on your distribution.

Bind GPU to VFIO driver

Use the lspci command to list all PCI devices. Find your AMD GPU in the list and note its PCI address. The PCI address is usually in the format XX:XX.X.

lspci -nn | grep -i amd

Each device in a system belongs to an IOMMU group. Devices in the same group can access each other's memory. For effective isolation, you want your GPU to be in its group or with devices that will also be passed through.

for d in /sys/kernel/iommu_groups//devices/; do
n=$(basename $(realpath $d));
echo "IOMMU Group ${d%%/*} $n $(lspci -nns $n)";
done | sort -V

Ensure the VFIO modules are loaded. You might need to load vfio, vfio_iommu_type1, vfio_pci, and vfio_virqfd.

You will need to create a VFIO configuration to bind your GPU to VFIO at boot. This is often done by editing the modules configuration file or a dedicated VFIO configuration file depending on your distribution.Create a file, e.g., /etc/modprobe.d/vfio.conf.Add a line to bind the GPU to VFIO, using the GPU's PCI IDs.ruby

    • options vfio-pci ids=1002:67df,1002:aaf0
      Replace 1002:67df,1002:aaf0 with the PCI IDs of your GPU and, if applicable, its associated audio device.

After setting up the configuration, you need to update the initial RAM disk to ensure these changes are applied at boot.

sudo update-initramfs -u

After updating the initramfs, reboot your system. Upon reboot, the AMD GPU should be bound to the VFIO driver and not be available to the host system.

Almost done! Now you have to open up your Virtual Manager and connect the pass the GPU to Virtual Machine MacOS.

Good job!

There you have it! You've successfully learned to install Mac on Linux via a VM. A new way to make a Hackintosh! It might seem daunting initially, but once you understand the ins and outs, it becomes a piece of cake!

silver iMac ad wireless keyboard
Photo by Patrick Ward / Unsplash

Performance should be similar (and in some cases even better) to Apple-made Mac, enjoy!

Remember, learning is a curve. Don't fret if you encounter challenges along the way. Always consult forums and blog posts for those pesky errors; someone somewhere probably already figured out a solution. Happy computing!

Disclaimer: The content in this tutorial is solely for educational purposes. Please be aware of the legality of your actions.