Podman 5.1.0+ documentation states that Rosetta is "enabled by default" on Apple Silicon Macs. However, the configuration flag (Rosetta: true in podman machine inspect) can show as enabled while Rosetta is not actually working. This silent failure causes x86_64 containers to fall back to QEMU user-mode emulation, which crashes during memory-intensive workloads like Rust compilation with errors like:
error: rustc interrupted by SIGSEGV, printing backtrace
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
The Rosetta activation chain has multiple points of failure:
When you run podman machine inspect --format '{{.Rosetta}}', you're reading a configuration flag, not the actual runtime state. The flag being true means:
- The hypervisor (AppleHV/vfkit) is configured to expose the Rosetta VirtioFS share
- The VM image includes Rosetta activation scripts
It does not guarantee:
- Rosetta is installed on the macOS host
- The VirtioFS mount succeeded
- The binfmt handler was registered
Inside the Podman machine (Fedora CoreOS), Rosetta activation depends on a systemd service chain:
rosetta-activation.service
→ ConditionPathExists=/etc/containers/enable-rosetta
→ Mounts VirtioFS at /var/mnt (or /mnt on older images)
→ Registers binfmt handler
The critical failure point: The rosetta-activation.service has a condition:
ConditionPathExists=/etc/containers/enable-rosettaIf this file doesn't exist, the service is silently skipped with no error. The journal shows:
rosetta-activation.service was skipped because of an unmet condition check
(ConditionPathExists=/etc/containers/enable-rosetta)
| Scenario | Result |
|---|---|
| Machine created before Podman 5.1.0, then Podman upgraded | Config says true, but VM image lacks proper setup |
| Machine created before Rosetta installed on host | VirtioFS tag exposed but empty/unmountable |
Machine upgraded via rpm-ostree without full reprovisioning |
Trigger file may be missing |
| Fresh machine on Podman 5.7.x (Homebrew) | Should work, but edge cases exist |
The standard diagnostic commands don't reveal the problem:
# This says true even when broken
podman machine inspect --format '{{.Rosetta}}'
# Output: true
# This shows Rosetta is "supported" but not whether it's active
podman infoYou must check inside the VM:
podman machine ssh
# This file determines if activation runs
ls -la /etc/containers/enable-rosetta
# This shows if Rosetta is actually registered
ls -la /proc/sys/fs/binfmt_misc/rosetta
# This shows what's handling x86_64 (should NOT exist if Rosetta is working)
ls -la /proc/sys/fs/binfmt_misc/qemu-x86_64When working correctly:
# On macOS host
podman machine inspect --format '{{.Rosetta}}'
# true
# Inside VM
podman machine ssh
# VirtioFS mount
mount | grep rosetta
# rosetta on /var/mnt type virtiofs (rw,relatime,context=system_u:object_r:nfs_t:s0)
# Rosetta binary available
ls -la /var/mnt/rosetta
# -rwxr-xr-x. 1 core core 1660888 ... /var/mnt/rosetta
# binfmt handler registered
cat /proc/sys/fs/binfmt_misc/rosetta
# enabled
# interpreter /var/mnt/rosetta
# flags: OCF
# ...
# QEMU should NOT be registered for x86_64
ls /proc/sys/fs/binfmt_misc/qemu-x86_64
# ls: cannot access '/proc/sys/fs/binfmt_misc/qemu-x86_64': No such file or directory
# Process check shows Rosetta
podman run -d --rm --name test --platform linux/amd64 alpine sleep 30
podman top test
# Shows: /var/mnt/rosetta /usr/bin/sleep sleep 30-
Install Rosetta on macOS host:
softwareupdate --install-rosetta --agree-to-license
(Requires admin privileges)
-
Ensure Podman machine is running:
podman machine start
podman machine ssh
sudo touch /etc/containers/enable-rosetta# Check if already mounted
mount | grep rosetta
# If not mounted, the rosetta tag should exist
cat /sys/fs/virtiofs/*/tag 2>/dev/null | grep rosetta
# Mount it (Fedora CoreOS uses /var/mnt)
sudo mount -t virtiofs -o context=system_u:object_r:nfs_t:s0 rosetta /var/mnt# Check if QEMU is registered
if [ -f /proc/sys/fs/binfmt_misc/qemu-x86_64 ]; then
echo -1 | sudo tee /proc/sys/fs/binfmt_misc/qemu-x86_64
fi# Determine rosetta path (usually /var/mnt/rosetta or /mnt/rosetta)
ROSETTA_PATH="/var/mnt/rosetta"
# Register
echo ":rosetta:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:${ROSETTA_PATH}:OCF" | sudo tee /proc/sys/fs/binfmt_misc/register# Create binfmt.d config
echo ":rosetta:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/var/mnt/rosetta:OCF" | sudo tee /etc/binfmt.d/rosetta.conf
# The trigger file is already created in Step 1# Exit VM
exit
# Test
podman run --rm --platform linux/amd64 alpine uname -m
# Should output: x86_64
# Verify using Rosetta (not QEMU)
podman run -d --rm --name test --platform linux/amd64 alpine sleep 10
podman top test
# Should show /var/mnt/rosetta in the command
podman stop testIf the VirtioFS tag isn't exposed or other fundamental issues exist:
# On macOS
softwareupdate --install-rosetta --agree-to-license
# Remove and recreate
podman machine stop
podman machine rm
# Recreate (inherits Rosetta from config)
podman machine init --cpus 4 --memory 14336 --disk-size 50
podman machine start
# Verify
podman machine inspect --format '{{.Rosetta}}'
podman machine ssh ls -la /proc/sys/fs/binfmt_misc/rosettaOn Fedora CoreOS, /mnt is a symlink to /var/mnt:
ls -la /mnt
# lrwxrwxrwx. 1 root root 8 ... /mnt -> /var/mntSome Rosetta documentation and older scripts reference /mnt/lima-rosetta or /mnt/rosetta, but:
- systemd mount units fail with "not canonical path" errors if you use
/mnt/... - The actual mount point should be
/var/mnt
The hypervisor (vfkit via AppleHV) exposes a VirtioFS share with the tag rosetta. You can verify it exists:
cat /sys/fs/virtiofs/*/tag
# rosetta
# (other tags for host shares)If rosetta isn't in this list, the hypervisor isn't configured correctly, which means the machine needs recreation.
The binfmt handler tells Linux "when you see an x86_64 ELF binary, run it through this interpreter." The registration string:
:rosetta:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/var/mnt/rosetta:OCF
Breakdown:
:rosetta:- handler nameM::- magic number matching (not extension-based)\x7fELF\x02\x01\x01...- ELF header pattern for x86_64\xff\xff...- mask for matching:/var/mnt/rosetta:- interpreter pathOCF- flags (O=open-binary, C=credentials, F=fix-binary)
- Improve diagnostics:
podman machine inspectshould show actual binfmt status, not just config flag - Add health check:
podman machine startshould verify Rosetta is working when configured - Better error messages: The silent
ConditionPathExistsskip should be logged more prominently - Documentation: Clarify that
rosetta=truein config doesn't guarantee functionality