Tools: Complete Guide to I tried to run Google Antigravity on an arm64 VM. It did not go well.

Tools: Complete Guide to I tried to run Google Antigravity on an arm64 VM. It did not go well.

The setup

Round 1: qemu-user-static

Round 2: FEX-Emu

Round 3: there is no round 3

The actual answer

What it cost

Lessons I tried to install Google Antigravity (the new agent dev IDE) on a headless arm64 Ubuntu VM. It is a x86_64 Electron app. Three emulation layers later, I gave up and uninstalled everything. Here is the trail of pain so you do not repeat it. The plan: install a desktop environment + RDP, emulate x86_64, run Antigravity, connect from my laptop. Sounds reasonable. It is not. The classic approach. Install qemu-user-static + binfmt-support, register qemu-x86_64 in binfmt_misc, point at an amd64 sysroot, run the binary. No amd64 dynamic linker. Bootstrap one with debootstrap: debootstrap finished extracting but post-install scripts crashed: qemu-user segfaulted on basic dpkg postinst. If passwd cannot configure itself, Chromium has zero chance. This is a known qemu-user limitation: threading + atomic ops + signal handling get exotic enough that complex binaries crash. FEX-Emu is purpose-built for this: userspace x86_64 -> aarch64 translation, designed with Chromium and Wine in mind. There is a PPA. (Pick the armv8.X package matching your CPU — check /proc/cpuinfo features. Ampere Altra has lse, lrcpc, asimddp => armv8.2.) FEX needs a rootfs. The shipped fetcher (FEXRootFSFetcher) opens a zenity GUI even with -y --assume-yes. On a headless box it hangs forever holding zero network connections. Skip it. Pull the JSON manifest and fetch directly: I grabbed the SquashFS image (~500MB), extracted it to a directory (no FUSE needed), pointed ~/.fex-emu/Config.json at it: Started FEXServer -p 3600 (persistent for an hour), then: Fixable. chmod 4755 + chown root:root on chrome-sandbox. Also disable AppArmor restricted userns (Ubuntu 24.04 added this): Try again under xvfb with --no-sandbox: V8 JIT crashed. Electron's V8 generates x86_64 machine code at runtime and runs it. FEX must re-translate that emitted code on the fly. It works for many binaries; for Electron with modern V8 it does not. SIGTRAP every time. Options I considered and rejected: Antigravity is an IDE. IDEs have Remote-SSH. The correct topology: The IDE runs on hardware that natively supports it. The VM stays headless and serves files + runs your stack. No emulation, no RDP, no zenity, no V8 JIT translation. I should have done this in the first 30 seconds. If you want to try anyway, the squashfs rootfs URL is in https://rootfs.fex-emu.gg/RootFS_links.json. Don't say I didn't warn you. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

$ -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y qemu-user-static binfmt-support -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y qemu-user-static binfmt-support -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y qemu-user-static binfmt-support x86_64-binfmt-P: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory x86_64-binfmt-P: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory x86_64-binfmt-P: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory -weight: 600;">sudo debootstrap --arch=amd64 --variant=minbase noble /opt/amd64-sysroot \ http://archive.ubuntu.com/ubuntu -weight: 600;">sudo debootstrap --arch=amd64 --variant=minbase noble /opt/amd64-sysroot \ http://archive.ubuntu.com/ubuntu -weight: 600;">sudo debootstrap --arch=amd64 --variant=minbase noble /opt/amd64-sysroot \ http://archive.ubuntu.com/ubuntu Setting up libpam-modules:amd64 (1.5.3-5ubuntu5) ... x86_64-binfmt-P: QEMU internal SIGSEGV {code=MAPERR, addr=0x20} Segmentation fault (core dumped) Setting up libpam-modules:amd64 (1.5.3-5ubuntu5) ... x86_64-binfmt-P: QEMU internal SIGSEGV {code=MAPERR, addr=0x20} Segmentation fault (core dumped) Setting up libpam-modules:amd64 (1.5.3-5ubuntu5) ... x86_64-binfmt-P: QEMU internal SIGSEGV {code=MAPERR, addr=0x20} Segmentation fault (core dumped) -weight: 600;">sudo add--weight: 500;">apt-repository -y ppa:fex-emu/fex -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y fex-emu-armv8.2 fex-emu-binfmt64 -weight: 600;">sudo add--weight: 500;">apt-repository -y ppa:fex-emu/fex -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y fex-emu-armv8.2 fex-emu-binfmt64 -weight: 600;">sudo add--weight: 500;">apt-repository -y ppa:fex-emu/fex -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y fex-emu-armv8.2 fex-emu-binfmt64 -weight: 500;">curl -fsSL https://rootfs.fex-emu.gg/RootFS_links.json | \ python3 -c "import json,sys; d=json.load(sys.stdin); \ [print(k, v['URL']) for k,v in d['v1'].items() if 'Ubuntu_24' in v['URL']]" -weight: 500;">curl -fsSL https://rootfs.fex-emu.gg/RootFS_links.json | \ python3 -c "import json,sys; d=json.load(sys.stdin); \ [print(k, v['URL']) for k,v in d['v1'].items() if 'Ubuntu_24' in v['URL']]" -weight: 500;">curl -fsSL https://rootfs.fex-emu.gg/RootFS_links.json | \ python3 -c "import json,sys; d=json.load(sys.stdin); \ [print(k, v['URL']) for k,v in d['v1'].items() if 'Ubuntu_24' in v['URL']]" { "Config": { "RootFS": "Ubuntu_24_04" } } { "Config": { "RootFS": "Ubuntu_24_04" } } { "Config": { "RootFS": "Ubuntu_24_04" } } FEXInterpreter /opt/antigravity/antigravity --version FEXInterpreter /opt/antigravity/antigravity --version FEXInterpreter /opt/antigravity/antigravity --version FATAL:sandbox/linux/suid/client/setuid_sandbox_host.cc:166] The SUID sandbox helper binary was found, but is not configured correctly. FATAL:sandbox/linux/suid/client/setuid_sandbox_host.cc:166] The SUID sandbox helper binary was found, but is not configured correctly. FATAL:sandbox/linux/suid/client/setuid_sandbox_host.cc:166] The SUID sandbox helper binary was found, but is not configured correctly. -weight: 600;">sudo chown root:root /opt/antigravity/chrome-sandbox -weight: 600;">sudo chmod 4755 /opt/antigravity/chrome-sandbox -weight: 600;">sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 -weight: 600;">sudo chown root:root /opt/antigravity/chrome-sandbox -weight: 600;">sudo chmod 4755 /opt/antigravity/chrome-sandbox -weight: 600;">sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 -weight: 600;">sudo chown root:root /opt/antigravity/chrome-sandbox -weight: 600;">sudo chmod 4755 /opt/antigravity/chrome-sandbox -weight: 600;">sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 xvfb-run -a FEXInterpreter /opt/antigravity/antigravity --no-sandbox --version xvfb-run -a FEXInterpreter /opt/antigravity/antigravity --no-sandbox --version xvfb-run -a FEXInterpreter /opt/antigravity/antigravity --no-sandbox --version Trace/breakpoint trap (core dumped) Trace/breakpoint trap (core dumped) Trace/breakpoint trap (core dumped) [Local laptop: Antigravity x86_64] --SSH--> [arm64 VM: your code] [Local laptop: Antigravity x86_64] --SSH--> [arm64 VM: your code] [Local laptop: Antigravity x86_64] --SSH--> [arm64 VM: your code] - Oracle Cloud Ampere VM, aarch64, Ubuntu 24.04 LTS - Headless (no display server, SSH only) - 96GB disk, 24GB RAM - Antigravity build: linux-x64 tarball, 168MB, Electron-based - box64 — same userspace translation class, same V8 problems. - Full-system KVM x86_64 VM — nested virt on arm64 Ampere is brutally slow, needs ~15GB disk, hours of setup, and you still need a display server inside. - Wait for an arm64 Antigravity build — not on the roadmap. - ~3GB of packages installed and then purged - 168MB tarball + 836MB EroFS + 497MB SquashFS rootfs (also purged) - A renewed appreciation for native binaries - Check arch before download. arch64 + linux-x64 .tar.gz = no. - Headless VM + Electron app = pick your pain. RDP into a heavy desktop, or admit the IDE belongs on your laptop. - qemu-user is for static utilities, not Chromium. - FEX-Emu is impressive but V8 self-modifying code is its kryptonite. - FEXRootFSFetcher is GUI-only; fetch the rootfs JSON directly on headless machines.