Skip to content
Dima Krasner edited this page Nov 3, 2023 · 28 revisions

Overview

The woof-CE project on GitHub is configured to run automated Puppy builds, for three purposes:

  1. Automated releases of new Puppy versions
  2. Easy publishing of alpha releases, to allow quick and frequent testing
  3. To continuously run woof-CE with recent changes, to make sure it still works as expected

The continuous builds use aggressive caching that reduces build times:

  • Packages downloaded by 1download are cached, and only the delta (updated or newly added packages) is downloaded
  • Packages built during 3builddistro are cached, and get rebuilt only if their build script has changed, or the packages selection has changed
  • When 3builddistro cross-compiles packages, busybox and bash are replaced with native executables that speed up autoconf
  • 3builddistro uses ccache, so slightly changed packages are very fast to build

With all this caching in place, most builds (including those that involve slow ARM cross-compilation under emulation), take 5 to 15 minutes:

In contrast, in release builds, only downloaded files are cached (for example, cross-compilation output is not cached), to ensure the entire Puppy build flow works end-to-end.

This pipeline builds kernels using the testing branch kernel-kit.

The kernel versions are chosen for their "longterm" status, which means they receive bug fixes and security fixes for years. This stability guarantee allows safe upgrade to a later bugfix release, i.e. from 4.19.185 to 4.19.186.

The output of kernel-kit is available for download, as build artifacts, and other CI pipelines download it. It is accompanied by matching, up-to-date firmware.

Some kernel versions have a -usrmerge variant: one where /lib/modules is moved to /usr/lib/modules, /sbin is moved to /usr/sbin, and so on. They will work with a Puppy built with USR_SYMLINKS=yes, where /lib and /sbin are symlinks to their counterparts under /usr.

To save time and space, forks of woof-CE use the build artifacts from puppylinux-woof-CE/woof-CE.

This rebuilds the Debian kernel with minimal Puppy customization on top, in order to achieve a low-maintenance, reliable stream of Debian-compatible and up-to-date kernels.

These kernels include all stability and security fixes that go into the Debian kernel, and most kernel-dependent things that work in Debian (for example, Landlock requires CONFIG_SECURITY_LANDLOCK=y) will also work in a Puppy that uses one of these.

However, this also means that these slightly more battle-tested and conservative kernels lag behind those in kernel.org: the 5.10.x kernel in Debian 11 is updated to the latest 5.10.x bugfix release only once in a while and goes through more QA before it's updated.

Twice a month, this pipeline builds kernels using the latest Debian kernel source, Debian kernel configuration (with few changes) and kernel-kit from the testing branch.

These kernels have only one variant, -usrmerge: they don't support aufs and will only work in any Puppy (not just Debian-based ones) where USR_SYMLINKS=yes.

This builds a Puppy and creates a GitHub draft release with the build output. The draft can be published to make it generally available for download, or discarded (for example, if it's found to be broken).