Table of Contents
macOS with UTM (Docker)
Caution
This installation method is not supported or maintained by the ARM Developers. For full support and continued maintenance, we recommend installing ARM via the supported Docker Container. This installation method was developed for macOS users who cannot run Docker natively with USB passthrough.
Use at your own risk
This guide covers installing ARM using Docker inside an Ubuntu Server VM running on macOS via UTM. This approach is necessary because ARM requires Linux and direct USB device access, which macOS cannot provide natively.
Important: You must use UTM's QEMU backend (Emulate), not Apple Virtualization (Virtualize). Apple Virtualization does not support USB passthrough.
Prerequisites
- Mac (Apple Silicon or Intel)
- External USB DVD/Blu-ray drive
- Ubuntu Server 24.04 ISO (ARM64 for Apple Silicon, AMD64 for Intel)
- At least 4GB RAM and 64GB storage available for the VM
Part 1: Install UTM
- Download UTM from https://mac.getutm.app
- Open the downloaded DMG file
- Drag UTM to your Applications folder
- Launch UTM from Applications
Tip: If macOS blocks the app, go to System Settings → Privacy & Security and click Open Anyway.
Part 2: Create the Ubuntu VM
Step 1: Start a New VM
- Open UTM and click Create a New Virtual Machine
- Select Emulate (NOT Virtualize - critical for USB passthrough)
- Select Linux
Step 2: Configure the VM
Boot ISO:
- Click Browse and select your Ubuntu Server ISO
Hardware Settings (Apple Silicon):
- Architecture:
ARM64 (aarch64) - System:
QEMU 8.2 ARM Virtual Machine - RAM:
4096 MB(minimum) - CPU Cores:
4
Hardware Settings (Intel Mac):
- Architecture:
x86_64 - System:
Standard PC (Q35 + ICH9, 2009) - RAM:
4096 MB(minimum) - CPU Cores:
4
Storage:
- Size:
64 GB(minimum recommended)
Network:
- Select Bridged (Advanced) and choose your network interface (usually
en0)
Step 3: Name and Create
- Name:
ARMorUbuntu-ARM - Click Save
Part 3: Install Ubuntu Server
- Start the VM and select Try or Install Ubuntu Server
- Follow the installation wizard:
- Installation type: Ubuntu Server (full, not minimized)
- Enable OpenSSH server
- Skip featured snaps
- After installation, remove the ISO from the virtual CD drive in UTM settings
- Get the VM's IP address:
ip addr show
Part 4: Connect USB DVD Drive
Attach the Drive in UTM
- With the VM running, plug in your USB DVD drive
- In the UTM window toolbar, click the USB icon
- Select your DVD drive to connect it to the VM
Verify the Drive
SSH into your VM:
ssh username@<VM_IP_ADDRESS>
Check if the drive is detected:
ls -la /dev/sr0
Expected output:
brw-rw----+ 1 root cdrom 11, 0 Jan 29 05:28 /dev/sr0
Part 5: Install Docker
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
Log out and back in for group changes to take effect, then verify:
docker --version
Part 6: Install ARM
Create Directory Structure
mkdir -p ~/arm/{config,logs,music,movies,completed}
cd ~/arm
Create Docker Compose File
cat > docker-compose.yml << 'EOF'
services:
arm:
image: automaticrippingmachine/automatic-ripping-machine:latest
container_name: arm
restart: unless-stopped
privileged: true
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- ARM_UID=1000
- ARM_GID=1000
volumes:
- ./config:/etc/arm/config
- ./logs:/home/arm/logs
- ./music:/home/arm/music
- ./movies:/home/arm/media/movies
- ./completed:/home/arm/media/completed
ports:
- "8080:8080"
devices:
- /dev/sr0:/dev/sr0
EOF
Note: Adjust
TZto your timezone (e.g.,America/Los_Angeles,Europe/London)
Start ARM
docker compose pull
docker compose up -d
Verify ARM is Running
docker logs arm --tail 20
Look for:
INFO ARM: DriveUtils.drives_search Optical drive detected: /dev/sr0
Part 7: Access ARM
Open your browser and navigate to:
http://<VM_IP_ADDRESS>:8080
Default credentials:
- Username:
admin - Password:
password
Change the default password immediately in Settings.
Optional: Shared Media Library
To save ripped media directly to a macOS folder, configure a VirtFS shared directory in UTM:
- Shut down the VM
- In UTM, edit the VM settings
- Under Sharing, add a directory path (e.g.,
/Volumes/Media Library) - Start the VM and mount the share:
sudo mkdir -p /mnt/media-library
sudo mount -t 9p -o trans=virtio share0 /mnt/media-library -oversion=9p2000.L
- Update your
docker-compose.ymlvolumes to use/mnt/media-library
For persistent mounting, add to /etc/fstab:
share0 /mnt/media-library 9p trans=virtio,version=9p2000.L,rw,_netdev 0 0
Note: VirtFS permissions require
chmod 777on the shared directory due to UID mismatches between macOS and Linux.
Troubleshooting
USB Drive Not Detected
- Verify you selected Emulate (QEMU), not Virtualize when creating the VM
- Check UTM's USB menu to ensure the drive is connected
- Run
ls -la /dev/sr*in the VM
ARM Shows "No drives found"
- Verify
/dev/sr0exists:ls -la /dev/sr0 - Check docker-compose.yml device path
- Restart the container:
docker compose restart
Cannot Access Web UI
- Verify container is running:
docker ps - Check if VM IP changed:
ip addr show - Confirm port 8080 is exposed:
docker port arm
Performance
QEMU emulation is slower than native virtualization. This is the tradeoff for USB passthrough support. Ripping works but takes longer than on native hardware.
Maintenance Commands
# View logs
docker logs arm -f
# Restart ARM
cd ~/arm && docker compose restart
# Update ARM
cd ~/arm && docker compose pull && docker compose up -d
# Stop ARM
cd ~/arm && docker compose down
Summary
| Component | Value |
|---|---|
| VM Software | UTM with QEMU backend |
| Guest OS | Ubuntu Server 24.04 |
| Container | automaticrippingmachine/automatic-ripping-machine |
| Web Interface | http://VM_IP:8080 |
| Default Login | admin / password |
| DVD Device | /dev/sr0 |
Getting Started
-
Docker
-
Manual Install
- See Alternate Installations
-
Automatic script install
Web Page Overview
Configuration
-
Configuration Files
-
Alternate Installations
- Ubuntu
Ubuntu 20.04 (install script)(Run the Debian script)- Ubuntu 25.04
- Debian
- Open Media Vault
- TrueNAS
- macOS with UTM (Docker)
Hardware Configuration
Troubleshooting
ARM Status
Contributing to ARM
How ARM Works