Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Home Assistant for 32-bit ARM (armv7) — 2026.7.0 and beyond

Unofficial Docker images and a fully reproducible build pipeline for running modern Home Assistant on 32-bit ARM (armv7 / armhf) hardware — e.g. a Turris Omnia, Raspberry Pi 2/3 in 32-bit mode, and similar boxes.

Home Assistant dropped 32-bit ARM support after release 2025.12: the armv7 base images stopped at Python 3.13 / Alpine 3.22, and the musllinux_armv7l Python wheels for cp314 were never built. HA 2026.7.0 requires Python ≥ 3.14. This repo bridges that gap — it rebuilds the entire image chain from source for armv7 and documents every non-obvious thing that has to be worked around.

⚠️ Unsupported. 32-bit is end-of-life upstream. This is a stop-gap for people who want a few more releases before upgrading hardware. Expect to maintain it yourself. No warranty.

Images

Pushed to Docker Hub (single-arch linux/arm/v7):

Tag Contents Size (disk / compressed)
gregy/homeassistant-armv7:2026.7.0 Complete — all integration requirements ~2.8 GB / ~0.8 GB
gregy/homeassistant-armv7:latest alias of the above
docker pull gregy/homeassistant-armv7:2026.7.0

All 1126 integration requirements install and import, including the packages that need native compilation on armv7 (numpy, cryptography, av, grpcio, rpds-py, jiter, zha/zigpy, isal, …).

The public images use the gregy/ namespace. To build and publish your own, set IMAGE_REPO in config.env (see below).

Upgrading an existing install (e.g. Turris Omnia)

docker pull gregy/homeassistant-armv7:2026.7.0
# then recreate your container with the new image, keeping your /config volume

First boot may be slow: the recorder database migrates to the 2026.7.0 schema.

Why this is non-trivial (the short version)

Building modern HA for armv7 hit a series of traps. The full write-up with root-cause analysis is in docs/FINDINGS.md; the highlights:

  • Build natively on Graviton2/3, not QEMU. AWS Graviton2/3 run 32-bit ARM code natively at EL0, so an armv7 container builds at full speed. Graviton4 removed this — it will not work.
  • uname -m lies. Inside an armv7 container on an aarch64 kernel, uname -m returns aarch64. Use /etc/apk/arch for the real architecture.
  • The wheel-tag trap (the big one). CPython built here reports sysconfig.get_platform() = linux-aarch64, so maturin/setuptools tag freshly-compiled wheels linux_aarch64 and uv then rejects them on the armv7l interpreter. Fix: build with _PYTHON_HOST_PLATFORM=linux-armv7l.
  • jemalloc page size. armv7 uses 4 KB pages — jemalloc must be built with --with-lg-page=12 (upstream hardcodes 16 / 64 KB and crashes).
  • s6-overlay mapping was removed. docker-base deleted the arms6-overlay-arm.tar.xz case when dropping armv7; it has to be restored.
  • isal / Intel ISA-L has no 32-bit-ARM assembly — link against Alpine's system isa-l package instead of the bundled build.
  • Keep the toolchain out of the final image. Compile in a builder stage and copy only the Python env into a clean final stage (4.7 GB → 2.8 GB).

Building it yourself

See docs/BUILD.md for the full walkthrough. Quick version:

cp config.env.example config.env      # edit IMAGE_REPO, REGISTRY_SECRETS, AWS_*
# 1. provision a Graviton2 build host (or bring your own armv7-capable host):
bash scripts/provision.sh
# provision.sh copies this repo to the host and runs scripts/build.sh, which:
#   base-alpine → base-python 3.14 → ha-base → core (complete, slim)
#   then smoke-tests and pushes.
# 2. when done:
bash scripts/teardown.sh

To build a smaller image with only your own integrations instead of all 1126, see the "Focused build" section of docs/BUILD.md.

Repository layout

patches/     Dockerfiles (patched forks of home-assistant/docker-base, docker, core)
scripts/     provisioning, build orchestration, requirements generation, teardown
docs/        FINDINGS.md (root-cause deep dive), BUILD.md (reproduction guide)
examples/    sample integration list + generated user requirements
config.env.example   copy to config.env and edit

Credits & license

The Dockerfiles here are patched derivatives of home-assistant/docker-base, home-assistant/docker, and home-assistant/core, all licensed Apache-2.0. This repository is likewise Apache-2.0 (see LICENSE). "Home Assistant" is a trademark of the Home Assistant project; this is an unofficial community build and is not affiliated with or endorsed by them.

About

Unofficial Home Assistant 2026.7.0+ Docker images and reproducible build pipeline for 32-bit ARM (armv7), after upstream dropped support post-2025.12.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages