courses

VM Setup on macOS (UTM)

VM Setup on macOS without paying for virtualization software

Requirements

You will need at least 40GB or so of free space on your hard drive for this class. We won’t likely use it all, but it needs to be there.

Common tools

Setting up a VM on macOS is relatively straightforward. While you could spend lots of money to get a commercial hypervisor like Parallels Desktop or VMware Fusion, that’s…ridiculous. Sure, they can do some fancy stuff, but we are sticking with open source solutions! Plus, they cost lots of money, and that’s just wrong.

So, what can we use? Well, there’s the option of VirtualBox if you’re on an Intel Mac. But a) that requires you are on an Intel Mac, b) that requires you interact with Oracle, and c) it has been nothing but trouble in my past classes. So, don’t use it. Instead, we’ll use the Universal Turing Machine (UTM) software. It’s free, it’s open source, and it’s pretty easy to use. It’s also a Universal app, so it runs on both Intel and Apple Silicon Macs. More importantly, it provides an easy-to-use wrapper around the QEMU hypervisor, which is what we’ll be using to run our VMs.

Alternatively, if you’re a brew user, you can use

$ brew install --cask utm

to get UTM installed. If you’re really feeling like you want to do things “The Linux Way”, you can install libvirt and virt-manager via brew, and use that to manage your VMs. I’m not going to cover that here, but it’s an option.

Or, you can go full masochist and use qemu directly. I’m not going to cover that here, either. And if you think it makes sense, why are you here? Go away. Or better yet, talk to me about becoming a TA.

VM Installation, Step by Step

  1. Download your image:

    #for ARM64 Macs
    ❯ curl -LO https://cdimage.ubuntu.com/releases/noble/release/ubuntu-24.04.4-desktop-arm64.iso
    ❯ #for Intel Macs
    ❯ curl -LO https://releases.ubuntu.com/noble/ubuntu-24.04.4-desktop-amd64.iso
    
  2. Checksum your image:

    #for ARM64 Macs
    ❯ shasum -a 256 ubuntu-24.04.4-desktop-arm64.iso
    c2610520bf582976839a1724c669e1cfed0547427be5a0ad12d457b92b46ffbe  ubuntu-24.04.4-desktop-arm64.iso
    ❯ #for Intel Macs
    ❯ shasum -a 256 ubuntu-24.04.4-desktop-amd64.iso
    3a4c9877b483ab46d7c3fbe165a0db275e1ae3cfe56a5657e5a47c2f99a99d1e  ubuntu-24.04.4-desktop-amd64.iso
    

In the instructions below, ignore the mentions of freebsd. I simply don’t have a system handy with which to take new screenshots. The process is the same, regardless.

  1. Create a new VM in Hyper-V by selection “New” and “Virtual Machine” from the right side of the Hyper-V Manager window.

    UTM main window with the "Create a New Virtual Machine" button and an empty VM list

  2. We want to virtualize, regardless of which underlying architecture we are using.

    UTM dialog showing two options: Virtualize (fast, requires native architecture) and Emulate (slower, any architecture)

  3. We are Linux, so select it:

    UTM operating system selection screen with Linux highlighted

  4. I would suggest you give your VM at least 4GB of memory, since it’s going to be the primary external interface to your work environment for this class. As for the cores, leaving it at default is fine, unless you want to limit it to a specific number of cores (at least 2!). Click continue.

  5. Browse to wherever you downloaded the image, and select the ISO that you downloaded. Click continue.

  6. For storage, 64GB should be plenty. We can resize later as needed. Click continue.

  7. If you are on an M series Mac, before booting the VM, we need to make a change. First, select the VM in the list, and then select “Edit” from the right side of the window. Scroll down and Select “New” under devices, and then select “Serial Port”.

    UTM New Device dropdown menu showing Serial Port option selected

  8. When the VM boots, you’ll select “Install”. It will open on the Serial window. Follow the prompts to install Ubuntu. The defaults are fine. Once it’s done, you can delete the serial port, and the display will work fine.