Files
linuxkit/docs/kernel-patches.md
2016-10-11 20:13:03 +01:00

2.0 KiB

Working with Linux kernel patches for Moby

We may apply patches to the Linux kernel used in Moby, primarily to cherry-pick some upstream patches or to add some additional functionality, not yet accepted upstream. This document outlines the recommended procedure to handle these patches.

Patches are located in alpine/kernel/patches and are maintained in git am format to keep important meta data such as the provenance of the patch.

Preparation

Patches are applied to point releases of the linux stable tree. You need an up-to-date copy of that tree:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Throughout we use the following variables:

  • MOBYSRC: Base directory of Moby Linux repository
  • LINUXSRC: Base directory of Linux stable kernel repository
  • LINUXTAG: Release tag to base the patches on e.g.:
MOBYSRC=~/src/docker/moby
LINUXSRC=~/src/docker/linux-stable
LINUXTAG=v4.4.24

Updating the patches to a new kernel version

Create a branch from a tag for the new patches, e.g.:

cd $LINUXSRC
git branch ${LINUXTAG}-moby ${LINUXTAG}
git checkout ${LINUXTAG}-moby

Import all the existing patches:

cd $LINUXSRC
git am ${MOBYSRC}/alpine/kernel/patches/*.patch

If this causes merge conflicts resolve them as they arise and continue as instructed.

Once finished, update the patches in Moby:

cd $LINUXSRC
rm $MOBYSRC/alpine/kernel/patches
git format-patch -o $MOBYSRC/alpine/kernel/patches ${LINUXTAG}..HEAD

Create a PR for Moby.

Adding new patches

For patches from upstream Linux kernel versions, use cherry-picking:

git cherry-pick -x <sha of commit>

The -x ensures that the origin of the patch is recorded in the commit.

For patches from the mailing list or patchworks, add a line like:

Origin: https://patchwork.ozlabs.org/patch/622404/

to the patch (after the Signed-off-by and Cc lines.

For patches written from scratch, make sure it has a sensible commit messages as well as a DCO line.