“The definition of insanity is doing the same thing over and over and expecting different results. The definition of homelabbing is trying every cloud provider until one doesn’t hate you.”
The Goal
I needed an Android device for testing Bootible — a one-liner provisioning tool for gaming handhelds. The problem: I don’t have a spare Android device lying around, and buying one just for development felt wasteful.
Enter Redroid — Android containers that run natively on ARM hardware. No emulation overhead, just containerised Android with ADB access. Connect via scrcpy and you’ve got a proper Android environment for testing.
Simple enough, right?
Attempt 1: TrueNAS SCALE
My TrueNAS box has plenty of horsepower — 56 threads, 128GB RAM. Running Redroid there would keep everything local with zero latency. Perfect.
|
|
|
|
Okay, let’s try that:
|
|
|
|
TrueNAS SCALE is not your typical Linux box. It’s an appliance with a read-only root filesystem. No installing packages, no loading kernel modules, no Redroid.
Result: Dead on arrival.
Attempt 2: Oracle Cloud A1 (Free Tier)
Oracle Cloud’s Always Free tier includes up to 4 ARM OCPUs and 24GB RAM on their Ampere A1 instances. Free ARM compute in Sydney? Sign me up.
- Created Oracle Cloud account
- Navigated to Compute → Create Instance
- Selected VM.Standard.A1.Flex
- Clicked Create
|
|
Tried AD-2. Same error. AD-3. Same.
This is Oracle Cloud’s dirty secret — the free tier instances are perpetually “out of capacity” in popular regions. Sydney? Forget it. You might get lucky at 3am on a Tuesday, but I wasn’t willing to write a script to spam the API.
Result: Phantom free tier.
Attempt 3: Oracle Cloud A2 (Paid)
Fine. I’ll pay. Oracle A2 instances are the newer Ampere Altra processors. Still ARM, but with actual availability.
|
|
The container started. Docker logs showed Android booting. Then:
|
|
And the entire VM froze. SSH session dead. Console showed kernel panic.
After some research: Oracle A2 instances don’t support 32-bit ARM binaries. The Ampere Altra processors are 64-bit only. Standard Redroid images include 32-bit compatibility libraries that cause immediate kernel panics.
The fix? Use Redroid’s _64only images:
|
|
But wait — there’s no Android 11 _64only image. The oldest is Android 12. And after the kernel panic, I was done fighting with Oracle.
Result: Works in theory, terrifying in practice.
Attempt 4: Hetzner ARM (CAX11)
Hetzner’s ARM servers are cheap (~€4/month), available in multiple regions, and most importantly: they support 32-bit ARM binaries.
Created a CAX11 in Helsinki:
|
|
It worked. Android 11 booted, ADB connected, scrcpy displayed the Android home screen.
Then I tried to actually use it:
|
|
|
|
280 milliseconds. From New Zealand to Helsinki. Every tap, every swipe, every interaction — a quarter-second delay. For development testing, it was borderline unusable.
Result: Works, but feels like using Android through molasses.
Attempt 5: AWS Graviton (Sydney)
At this point I was ready to throw money at the problem. AWS has Graviton instances in Sydney. Their t4g.small is free tier eligible (750 hours/month until December 2026). Let’s try it.
|
|
Checked boot status:
|
|
|
|
Connected from my PC:
|
|
|
|
28 milliseconds. Ten times faster than Hetzner. scrcpy was responsive, taps registered instantly, the whole experience felt local.
Result: Finally.
The Scorecard
| Provider | Region | Cost | Latency (NZ) | Result |
|---|---|---|---|---|
| TrueNAS | Local | Free | 0ms | Read-only filesystem |
| Oracle A1 | Sydney | Free | N/A | “Out of capacity” forever |
| Oracle A2 | Sydney | ~$15/mo | N/A | Kernel panics (no 32-bit) |
| Hetzner CAX11 | Helsinki | ~€4/mo | 280ms | Works but unusable |
| AWS t4g.small | Sydney | Free tier | 28ms | Works perfectly |
Lessons Learned
1. TrueNAS is an Appliance
Don’t try to use TrueNAS SCALE as a general-purpose Linux box. It’s designed to run apps through their official app system, not arbitrary Docker containers with kernel module requirements.
2. Oracle Cloud Free Tier is a Lie
The A1 instances are theoretically free. In practice, they’re never available in useful regions. The paid A2 tier works but has its own problems (see below).
3. Not All ARM is Equal
Oracle A2 (Ampere Altra) and AWS Graviton processors are 64-bit only. Standard Redroid images include 32-bit ARM libraries that cause kernel panics. Always use _64only variants:
|
|
Hetzner CAX (Ampere eMAG) supports both 32-bit and 64-bit, so standard images work there.
4. Geography Matters
For interactive applications like scrcpy, latency is everything. 280ms makes an Android device feel broken. 28ms feels native. Pick a region close to you.
5. Free Tier Math
AWS t4g.small gives you 750 hours/month free — that’s 24/7 operation with room to spare. The free tier runs until December 2026. After that, it’s about $12/month in Sydney. Still cheaper than a dedicated Android device.
6. Tailscale is the Answer
Every provider in this journey used Tailscale for access. No public ports exposed, no firewall rules to manage, no VPN certificates to rotate. Just tailscale up and you’re connected.
The Final Setup
|
|
Quick Reference
|
|
The full setup guide is in my home-ops repo.