3 Commits
Author SHA1 Message Date
agessaman 99e976eca0 feat: Improve ARMv7 installation process with piwheels support
- Updated `install-service.sh` to source `scripts/armv7_pip_args.sh`, ensuring consistent handling of pip arguments for 32-bit ARM hosts.
- Enhanced `constraints-armv7.txt` to clarify the need for specific package versions to avoid installation issues (issue #269).
- Modified `README.md` to document the application of piwheels index and constraints during installation on 32-bit ARM systems.
- Added tests to verify the correct integration of the ARMv7 pip arguments helper and its behavior across different architectures.
2026-09-05 08:46:05 -07:00
agessaman 198536a2fe build(armv7): resolve 32-bit ARM dependencies to wheels via piwheels
Ten dependencies publish no prebuilt armv7 wheel on PyPI (PyNaCl,
pycryptodome, ephem, pyephem, brotli, cffi, MarkupSafe, librt,
backports.zstd, sgmllib3k) and compiled from source on 32-bit ARM. On a
Raspberry Pi 2 that is hours of work and a likely OOM at 1 GB RAM, and in
CI it meant recompiling them under QEMU on every arm/v7 build.

piwheels supplies prebuilt armv7 wheels for those packages. The remaining
two gaps are version skew rather than missing builds: pip prefers the
newest release across indexes, and for brotli and ephem the newest PyPI
release is one step ahead of piwheels' current cp311 build. Holding those
two one version back lets the whole set resolve to wheels.

Measured in a linux/arm/v7 container against requirements.txt:

  PyPI only ............................ 10 compiled from source
  + piwheels extra-index-url ...........  2 compiled from source
  + constraints-armv7.txt ..............  0 compiled - 75/75 wheels

No other package is held back; cryptography, aiohttp, pycryptodome and
PyNaCl all resolve to current releases.

- constraints-armv7.txt: the two pins, with measurements and a command to
  re-check them as piwheels catches up. platform_machine markers make the
  file a no-op if applied off-ARM.
- install-service.sh: configure_armv7_pip_args, gated on uname -m and
  wired into both pip call sites. Warns rather than fails if the
  constraints file is absent.
- Dockerfile: same treatment for the linux/arm/v7 leg only, via
  TARGETPLATFORM. amd64 and arm64 keep resolving from PyPI alone.
- config.ini.pi2-example: document what to do per install method.

Verified: arm/v7 builder stage completes in 2:49 with zero source builds;
amd64 builder stage unaffected with zero piwheels downloads; arch gating
exercised for x86_64, aarch64 and armv7l; 73 config tests pass.

Note that piwheels is now an additional trusted index on the arm/v7 leg
and on 32-bit ARM native installs.
2026-08-06 22:51:37 -07:00
agessaman 31a71faf48 docs(armv7): improve config documentation for ARMv7 32-bit architectures. 2026-08-06 21:39:31 -07:00