Skip to content

CustomPiOS 2.0.0

Latest

Choose a tag to compare

@guysoft guysoft released this 14 Jul 08:56

This is the seventh release of CustomPiOS and the first v2 release. It is the result of the CustomPiOS V2 effort that started after 1.5.0, the last v1 version.

This release makes CustomPiOS board aware, so it can build images for a growing list of ARM boards and not just the Raspberry Pi. It also adds remote and meta modules, automatic base image downloads, a move to the GitHub Container Registry, Debian Trixie groundwork, and a shared end-to-end testing framework that downstream distros can reuse in their own CI.

Thats a lot for a single release after two years of development.

A note for maintainers and distro authors on how to use the new v2 features:

  • Boards are now first class. The list of supported boards and their base images lives in src/images.yml. When building inside the CustomPiOS Docker container you can pick a board with build -b <board> (for example build -b raspberrypiarm64), list all known boards with build -b list, and download that board's current base image automatically with build -d -b <board>. If you build outside that wrapper, set BASE_BOARD in your distro src/config, variant, or src/config.local and CustomPiOS will derive BASE_ARCH and the image path from it.
  • Remote modules let several distros share one module without copying it. They are declared in src/modules_remote.yml and pulled at build time, see the remote module support commit.
  • Meta modules pick board specific sub-modules automatically. A module can ship a meta script (see src/modules/base/meta and src/modules/network/meta) that returns extra modules based on BASE_BOARD, so the right armbian/orange sub-modules get injected for the board you are building, see meta modules support.
  • The Docker image moved from Docker Hub to ghcr.io, use ghcr.io/guysoft/custompios:devel (or a branch tag) in your distro Dockerfile, see #252.
  • There is now a shared end-to-end testing framework in src/distro_testing/ and a reusable e2e-test.yml workflow. A distro calls the workflow with its image artifact and distro name, ships a testing/Dockerfile that copies the shared QEMU/SSH helpers, and adds its own testing/tests/test_*.sh and optional testing/hooks/ scripts. The framework boots the image in QEMU, waits for SSH, runs the tests, and captures a screenshot. See src/distro_testing/README.md for the full setup.

Updates:

  • There is now a unit test suite, run it with make test, and it runs on all branches in CI #245 63aaabf 98277d1
  • The readme has a tests section 693157e and LEDPotato was added to the list of distributions using CustomPiOS 528d29e

Chagngelog

  • CustomPiOS v2 - support for meta modules and remote modules #221 #214, see the maintainer note above. Remote module support 3bbea66, meta modules support c9a0914, auto download images by base board and python package 9e27240
  • Move to the ghcr.io docker container registry #252 1027bcb
  • Support librecomputer Le Potato AML-S905X-CC Debian image #233 e922881, including auto downloading the latest raspbian image 2a3807b, keyring fixes 0a39a13 and usage statistics 7d4e97c
  • Mount /sys directory to allow building of arm64 images #238 e29a331 (thanks @sharpn), and mount /proc and /sys read only db54c95
  • Fix aarch/arm64 architecture issues #240 #251 16ccb1f
  • Fix logic so arm-on-arm doesn't need qemu static, and add more escape hatches for qemu-*-static #261 cd42f5b 75347d1 (thanks @jxmx)
  • Source config.local before generate_board_config.py for correct BASE_BOARD, related #262 883cc9f and add variant config pre-seeding for BASE_BOARD in src/build 406a4cc
  • Config file can override BASE_BOARD from cli 5735722
  • Default to base board raspberrypiarmhf if not defined, for example in CustomPiOS v1 c505f18 cee120a, and fix CustomPiOS v1 image path detection b3f2c79
  • Use image folder for raspberrypiarm64 images 23fcc0c
  • Handle images with "debain" in their name 5ac52ff
  • fix: set BASE_ARCH to armhf for Banana Pi BPI-M2 ZERO #248 c43d417 (thanks @meteyou)
  • fix: update armbian image urls form bullseye to bookworm #250 29355dc (thanks @meteyou)
  • Handle lack of policykit-1 in Debian Trixie, replace with polkitd and pkexec #260 3e583a5 d772273
  • Upgrade libconfig9 to libconfig11 for Debian Trixie, fixes #263 and is part of #260 79b77a4
  • Fix deprecated IPQoS sshd flag, fixes #259 and #260 6827c72
  • Build on tags and update branch list 820695c
  • Remove unused git imports from generate_board_config.py, fixes CI #272 b8319cf

common.sh

  • Extract setup_qemu_static() and add test coverage for QEMU binary copy logic #270 ed30ce7
  • Fix chroot_correct_qemu execution 19a8738

Module changes

  • base - Make the base module board aware, with per board image paths and BASE_BOARD/BASE_OS defaults, part of #221
  • base - Meta module that injects armbian/orange sub modules for matching boards c9a0914
  • base - Trixie compatibility: polkitd/pkexec packages, apt_update_skip, lepotato keyring and SSH on debian boards, IPQoS throughput 3e583a5 d772273 6827c72
  • network - Meta module that adds armbian_net/orange_net by board c9a0914
  • network - Move wpa_supplicant things into the conditional block #242 637bcf5 (thanks @jxmx)
  • network - Let NetworkManager turn wifi on if configured on raspbian e553cad
  • disable-services - Use apt_update_skip and switch to polkitd/pkexec for Trixie d89b6c4
  • gui - Fix typo in gui placeholder string ee78961
  • gui - fix autologin-session #253 #254 0f05cda (thanks @iwl)
  • gui - Fix GUI autologin without tty autologin #274 d293309
  • gui - Add xinput needed for rotate.sh and libconfig11 for the compositor 053fd3f
  • usage-statistics - Add lepotato boot_report variant 7d4e97c
  • raspicam - Force camera_auto_detect=0 for mjpeg-streamer, see OctoPi#837 22e6558

Testing and CI

  • Add unit tests and run them on github actions, see also #240 #245 63aaabf
  • Make tests run on all branches 98277d1
  • Add shared distro e2e testing framework and update QEMU boot scripts #271 b2024ad
  • Add reusable E2E workflow, SSH helpers, and CI trigger for feature/e2e d9adf04
  • Add shared browser-helpers.sh for headless screenshots 27ff1d3
  • Fix E2E SSH: set pi user shell to /bin/bash in prepare-image #273 1bdce6c and seed /etc/sudoers.d/010_pi-nopasswd 9793eb9

Thanks

Thank you to all contributors, also thanks to @davidzwa who has been helping with the issue tracker.

CustomPiOS v2 has been a long effort and this release and has several changes potentially breaking, please do post if you have something that you came across so others can workaround it together.