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.
- Added `libffi-dev` and `libssl-dev` to the first RUN command for enhanced support of cryptographic operations.
- Included `libffi8` in the second RUN command to ensure compatibility with specific libraries.
These changes optimize the Docker image for building applications that require these libraries.
- Modified the Dockerfile to set ownership of copied files directly during the copy operation, enhancing file permissions management.
- Updated the GitHub Actions workflow to limit the build platforms to linux/arm64 and linux/arm/v7, streamlining the build process for specific architectures.
These changes improve the efficiency and reliability of the Docker image build process.
Add .github/workflows/docker-build.yml triggered on push to main and
version tags. Builds linux/amd64, linux/arm64, and linux/arm/v7 via
QEMU. Attaches SBOM and provenance attestations to the image manifest.
Update Dockerfile with non-root user and current Python base image.
- Updated the database migration logic to handle missing tables gracefully, ensuring that migrations for existing installations do not block the process.
- Added checks for the existence of specific columns in the `repeater_contacts`, `complete_contact_tracking`, and `mesh_connections` tables, allowing for more robust schema updates.
- Introduced logging for migration errors to improve visibility and troubleshooting during the migration process.
- Ensured that the migration runs seamlessly for users accessing the web viewer without prior bot startup, enhancing user experience.
- Enhanced docker-setup.sh to ensure device mappings are correctly moved from the volumes section to the devices section in Docker Compose files.
- Added checks for serial device permissions and provided detailed instructions in DOCKER.md for resolving permission issues.
- Updated Dockerfile to add the meshcore user to the dialout group for serial port access, improving compatibility with serial devices.
- Improved logging functionality in core.py to handle log file paths more robustly, ensuring directories are created as needed and handling errors gracefully.
- Revised DOCKER.md to recommend building directly with `docker build` for improved compatibility on ARM devices and clarified the use of host network mode.
- Enhanced Dockerfile to utilize cache mounts for apt and pip installations, improving build efficiency and reducing redundant downloads.
- Updated GitHub Actions workflow to support multi-platform builds for both amd64 and arm64 architectures, ensuring broader compatibility.
- Removed unnecessary version declaration from docker-compose.yml.
- Added detailed troubleshooting steps for build failures on ARM devices in DOCKER.md, including network mode adjustments and Docker daemon checks.
- Updated Dockerfile to maintain consistent casing in the build stage declaration.
- Added Docker deployment instructions to the README, including steps for creating data directories, updating configuration paths, and starting the application with Docker Compose.
- Updated .gitignore to include a new data directory structure, ensuring user-specific configurations, databases, and logs are ignored while maintaining the directory structure.