Skip to content
Dima Krasner edited this page Sep 22, 2015 · 4 revisions

Intro

kernel-kit is the script that builds Puppy's kernels.

It takes care of four error-prone tasks:

  • Adding Aufs to the kernel sources
  • Patching the kernel to make it behave like a Puppy kernel (by making it less verobse, etc')
  • Producing packages for the kernel binaries, headers and complete sources
  • Documenting the entire building process, using logging and patches that show changes done to the kernel

Thanks to kernel-kit, the secret art of Puppy kernel building is no longer secret and the entire process is reproducible, so anyone can build a custom Puppy kernel based on an existing one.

Usage

Edit build.conf, then run build.sh. Make sure you pick a kernel version that matches any of the configurations under configs_extra, or add a new one and send a pull request, so you can maintain your kernel configuration through woof-CE.

It's always safe to upgrade minor versions (i.e building kernel 3.14.53 with a 3.14.20 configuration file), but upgrading to a newer major version (e.g 3.18.x) requires a new configuration file generated manually (with menuconfig, etc').

Compatibility

kernel-kit patches the kernels built by it so they don't have a minor version: for example, a 3.14**.53** kernel thinks it's 3.14). This way, third-party drivers (e.g Nvidia drivers) continue to work with future minor versions (3.14.54, 3.14.55, etc') and don't have to be rebuilt.

It's /safe/, because minor versions are guaranteed not to break compatibility. Also, users don't feel this change, as the kernel package version still shows its /actual/ version.

In other words: you, as a developer, bump the minor version in build.conf, build the new kernel and the users can upgrade safely, without any compatibility issues.

Longterm kernels

Some kernel versions (called "longterm" versions) receive stability and security fixes for a longer period, compared to "normal" versions. Thus, they become much more stable over time and distro developers can choose to stick with them instead of frequently updating the kernel.

kernel-kit and the compatibility trick mentioned above allow the use of frequently-updated longterm kernels. In fact, this is encouraged, as it improves stability while saving time for everybody: both developers and users.

Deblobbed kernels

kernel-kit is able to build Linux-libre, a deblobbed version of Linux. It's a 100% libre kernel, without binary blobs (firmware, obfuscated code, etc') present in Linux. Therefore, it provides better privacy and security at the expense of hardware support, since some drivers do not work without non-free firmware.

Although Linux-libre provides deblobbed kernel sources, alongside the scripts used to produce them, kernel-kit uses the original Linux sources and deblobs them using those scripts after the usual patching and cleanup procedure, because sometimes, some patches (especially Aufs) cannot be applied on the deblobbed sources tree. They have to be applied before the deblobbing. Therefore, building deblobbed kernels with kernel-kit takes much more time but the output is fully reproducible.

More documentation

See the comments in build.conf.