Skip to content

Commit d6f07c8

Browse files
Merge branch 'automatic-ripping-machine:main' into main
2 parents 7b58a1d + 894bcf9 commit d6f07c8

4 files changed

Lines changed: 436 additions & 27 deletions

File tree

arm/ui/utils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -656,8 +656,11 @@ def build_arm_cfg(form_data, comments):
656656
# Skip the Cross Site Request Forgery (CSRF) token
657657
if key == "csrf_token":
658658
continue
659+
# Strip whitespace from values to prevent issues with keys/values
660+
if isinstance(value, str):
661+
value = value.strip()
659662
# Check if value contains "KEY" or "API" (any case)
660-
elif re.search(r"_KEY|_API|_PASSWORD", key):
663+
if re.search(r"_KEY|_API|_PASSWORD", key):
661664
key_value = "####--redacted--####"
662665
else:
663666
key_value = value
@@ -696,8 +699,11 @@ def build_apprise_cfg(form_data):
696699
# Skip the Cross Site Request Forgery (CSRF) token
697700
if key == "csrf_token":
698701
continue
702+
# Strip whitespace from values to prevent issues with keys/values
703+
if isinstance(value, str):
704+
value = value.strip()
699705
# Check if value contains "KEY" or "API" (any case)
700-
elif re.search(r"KEY|API|PASS|TOKEN|SECRET", key):
706+
if re.search(r"KEY|API|PASS|TOKEN|SECRET", key):
701707
key_value = "####--redacted--####"
702708
else:
703709
key_value = value
Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
# macOS with UTM (Docker)
2+
3+
> [!CAUTION]
4+
> This installation method is not supported or maintained by the ARM Developers.
5+
> For full support and continued maintenance,
6+
> we recommend installing ARM via the supported [Docker Container](https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker).
7+
> This installation method was developed for macOS users who cannot run Docker natively with USB passthrough.
8+
>
9+
> **Use at your own risk**
10+
11+
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.
12+
13+
> **Important:** You must use UTM's **QEMU backend** (Emulate), not Apple Virtualization (Virtualize). Apple Virtualization does not support USB passthrough.
14+
15+
## Prerequisites
16+
17+
- Mac (Apple Silicon or Intel)
18+
- External USB DVD/Blu-ray drive
19+
- [Ubuntu Server 24.04 ISO](https://ubuntu.com/download/server) (ARM64 for Apple Silicon, AMD64 for Intel)
20+
- At least 4GB RAM and 64GB storage available for the VM
21+
22+
---
23+
24+
## Part 1: Install UTM
25+
26+
1. Download UTM from [https://mac.getutm.app](https://mac.getutm.app)
27+
2. Open the downloaded DMG file
28+
3. Drag UTM to your Applications folder
29+
4. Launch UTM from Applications
30+
31+
> **Tip:** If macOS blocks the app, go to **System Settings → Privacy & Security** and click **Open Anyway**.
32+
33+
---
34+
35+
## Part 2: Create the Ubuntu VM
36+
37+
### Step 1: Start a New VM
38+
39+
1. Open UTM and click **Create a New Virtual Machine**
40+
2. Select **Emulate** (NOT Virtualize - critical for USB passthrough)
41+
3. Select **Linux**
42+
43+
### Step 2: Configure the VM
44+
45+
**Boot ISO:**
46+
- Click **Browse** and select your Ubuntu Server ISO
47+
48+
**Hardware Settings (Apple Silicon):**
49+
- Architecture: `ARM64 (aarch64)`
50+
- System: `QEMU 8.2 ARM Virtual Machine`
51+
- RAM: `4096 MB` (minimum)
52+
- CPU Cores: `4`
53+
54+
**Hardware Settings (Intel Mac):**
55+
- Architecture: `x86_64`
56+
- System: `Standard PC (Q35 + ICH9, 2009)`
57+
- RAM: `4096 MB` (minimum)
58+
- CPU Cores: `4`
59+
60+
**Storage:**
61+
- Size: `64 GB` (minimum recommended)
62+
63+
**Network:**
64+
- Select **Bridged (Advanced)** and choose your network interface (usually `en0`)
65+
66+
### Step 3: Name and Create
67+
68+
- Name: `ARM` or `Ubuntu-ARM`
69+
- Click **Save**
70+
71+
---
72+
73+
## Part 3: Install Ubuntu Server
74+
75+
1. Start the VM and select **Try or Install Ubuntu Server**
76+
2. Follow the installation wizard:
77+
- Installation type: **Ubuntu Server** (full, not minimized)
78+
- **Enable OpenSSH server**
79+
- Skip featured snaps
80+
3. After installation, remove the ISO from the virtual CD drive in UTM settings
81+
4. Get the VM's IP address:
82+
83+
```bash
84+
ip addr show
85+
```
86+
87+
---
88+
89+
## Part 4: Connect USB DVD Drive
90+
91+
### Attach the Drive in UTM
92+
93+
1. With the VM running, plug in your USB DVD drive
94+
2. In the UTM window toolbar, click the **USB icon**
95+
3. Select your DVD drive to connect it to the VM
96+
97+
### Verify the Drive
98+
99+
SSH into your VM:
100+
101+
```bash
102+
ssh username@<VM_IP_ADDRESS>
103+
```
104+
105+
Check if the drive is detected:
106+
107+
```bash
108+
ls -la /dev/sr0
109+
```
110+
111+
Expected output:
112+
```
113+
brw-rw----+ 1 root cdrom 11, 0 Jan 29 05:28 /dev/sr0
114+
```
115+
116+
---
117+
118+
## Part 5: Install Docker
119+
120+
```bash
121+
sudo apt update && sudo apt upgrade -y
122+
curl -fsSL https://get.docker.com | sudo sh
123+
sudo usermod -aG docker $USER
124+
```
125+
126+
Log out and back in for group changes to take effect, then verify:
127+
128+
```bash
129+
docker --version
130+
```
131+
132+
---
133+
134+
## Part 6: Install ARM
135+
136+
### Create Directory Structure
137+
138+
```bash
139+
mkdir -p ~/arm/{config,logs,music,movies,completed}
140+
cd ~/arm
141+
```
142+
143+
### Create Docker Compose File
144+
145+
```bash
146+
cat > docker-compose.yml << 'EOF'
147+
services:
148+
arm:
149+
image: automaticrippingmachine/automatic-ripping-machine:latest
150+
container_name: arm
151+
restart: unless-stopped
152+
privileged: true
153+
environment:
154+
- PUID=1000
155+
- PGID=1000
156+
- TZ=America/New_York
157+
- ARM_UID=1000
158+
- ARM_GID=1000
159+
volumes:
160+
- ./config:/etc/arm/config
161+
- ./logs:/home/arm/logs
162+
- ./music:/home/arm/music
163+
- ./movies:/home/arm/media/movies
164+
- ./completed:/home/arm/media/completed
165+
ports:
166+
- "8080:8080"
167+
devices:
168+
- /dev/sr0:/dev/sr0
169+
EOF
170+
```
171+
172+
> **Note:** Adjust `TZ` to your timezone (e.g., `America/Los_Angeles`, `Europe/London`)
173+
174+
### Start ARM
175+
176+
```bash
177+
docker compose pull
178+
docker compose up -d
179+
```
180+
181+
### Verify ARM is Running
182+
183+
```bash
184+
docker logs arm --tail 20
185+
```
186+
187+
Look for:
188+
```
189+
INFO ARM: DriveUtils.drives_search Optical drive detected: /dev/sr0
190+
```
191+
192+
---
193+
194+
## Part 7: Access ARM
195+
196+
Open your browser and navigate to:
197+
198+
```
199+
http://<VM_IP_ADDRESS>:8080
200+
```
201+
202+
**Default credentials:**
203+
- Username: `admin`
204+
- Password: `password`
205+
206+
> **Change the default password immediately** in Settings.
207+
208+
---
209+
210+
## Optional: Shared Media Library
211+
212+
To save ripped media directly to a macOS folder, configure a VirtFS shared directory in UTM:
213+
214+
1. Shut down the VM
215+
2. In UTM, edit the VM settings
216+
3. Under **Sharing**, add a directory path (e.g., `/Volumes/Media Library`)
217+
4. Start the VM and mount the share:
218+
219+
```bash
220+
sudo mkdir -p /mnt/media-library
221+
sudo mount -t 9p -o trans=virtio share0 /mnt/media-library -oversion=9p2000.L
222+
```
223+
224+
5. Update your `docker-compose.yml` volumes to use `/mnt/media-library`
225+
226+
For persistent mounting, add to `/etc/fstab`:
227+
228+
```
229+
share0 /mnt/media-library 9p trans=virtio,version=9p2000.L,rw,_netdev 0 0
230+
```
231+
232+
> **Note:** VirtFS permissions require `chmod 777` on the shared directory due to UID mismatches between macOS and Linux.
233+
234+
---
235+
236+
## Troubleshooting
237+
238+
### USB Drive Not Detected
239+
240+
1. Verify you selected **Emulate** (QEMU), not Virtualize when creating the VM
241+
2. Check UTM's USB menu to ensure the drive is connected
242+
3. Run `ls -la /dev/sr*` in the VM
243+
244+
### ARM Shows "No drives found"
245+
246+
1. Verify `/dev/sr0` exists: `ls -la /dev/sr0`
247+
2. Check docker-compose.yml device path
248+
3. Restart the container: `docker compose restart`
249+
250+
### Cannot Access Web UI
251+
252+
1. Verify container is running: `docker ps`
253+
2. Check if VM IP changed: `ip addr show`
254+
3. Confirm port 8080 is exposed: `docker port arm`
255+
256+
### Performance
257+
258+
QEMU emulation is slower than native virtualization. This is the tradeoff for USB passthrough support. Ripping works but takes longer than on native hardware.
259+
260+
---
261+
262+
## Maintenance Commands
263+
264+
```bash
265+
# View logs
266+
docker logs arm -f
267+
268+
# Restart ARM
269+
cd ~/arm && docker compose restart
270+
271+
# Update ARM
272+
cd ~/arm && docker compose pull && docker compose up -d
273+
274+
# Stop ARM
275+
cd ~/arm && docker compose down
276+
```
277+
278+
---
279+
280+
## Summary
281+
282+
| Component | Value |
283+
|-----------|-------|
284+
| VM Software | UTM with QEMU backend |
285+
| Guest OS | Ubuntu Server 24.04 |
286+
| Container | `automaticrippingmachine/automatic-ripping-machine` |
287+
| Web Interface | `http://VM_IP:8080` |
288+
| Default Login | admin / password |
289+
| DVD Device | /dev/sr0 |

arm_wiki/_Sidebar.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
- [Debian](Alternate-Install-Debian)
4444
- [Open Media Vault](Alternate-Install-OMV)
4545
- [TrueNAS](Alternate-Install-TrueNAS)
46-
46+
- [macOS with UTM (Docker)](Alternate-Install-macOS-UTM)
4747

4848
**Hardware Configuration**
4949
- [Adding Intel QSV Support](Hardware-Transcode-Intel-QSV)

0 commit comments

Comments
 (0)