Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions docs/reference/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@ kernel-upload-rights
dkms-upload-rights
```

```{toctree}
:maxdepth: 2
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @awhitcroft , was there a reason for setting :maxdepth: 2 here?
For landing pages I would suggest keeping it clean and just having the title displayed.

:caption: Snap Lifecycle

snap-lifecycle
```

```{toctree}
:maxdepth: 1
:caption: General
Expand Down
150 changes: 150 additions & 0 deletions docs/reference/snap-lifecycle.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
**************
Snap Lifecycle
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Snap Lifecycle
Snap lifecycle

Ubuntu style guide recommends we use sentence case headings. Same comment for the rest of the doc.
https://docs.ubuntu.com/styleguide/en/#headings

Thanks.

**************

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This guide describes the build and workflow lifecycle of kernel snaps.

Ubuntu style guide also advises against stacked headings, e.g. headings need to be followed by content.
https://docs.ubuntu.com/styleguide/en/#headings

Snap Build Lifecycle
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Snap Build Lifecycle
Snap build lifecycle

====================
This document aims to document the lifecycle of the various kernel snap
forms.

Background
----------
The majority of kernels with snaps are consumed both as Debian packages and
Comment on lines +7 to +12
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This document aims to document the lifecycle of the various kernel snap
forms.
Background
----------
The majority of kernels with snaps are consumed both as Debian packages and
The majority of kernels with snaps are consumed both as Debian packages and

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can remove the intro here. The 'background' covers it sufficiently.

those snaps. To reduce testing requirements and streamline production the same
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
those snaps. To reduce testing requirements and streamline production the same
snaps. To reduce testing requirements and streamline production, the same

binaries are used for both forms. Due to the Ubuntu requirement for source to
be included with the binaries it is simplest to generate the binaries as part
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
be included with the binaries it is simplest to generate the binaries as part
be included with the binaries, it is simplest to generate the binaries as part

of generating the Debian binary packages and repackage those into snaps where
needed. Where a kernel is to be signed this is performed during the packaging
process in those Debian package builds.

Workflow Support
----------------
Comment on lines +20 to +21
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Workflow Support
----------------
Workflow support
----------------

Kernel snaps are represented as a separate phase in the kernel workflow. There
will be a Workflow Tracker for each Debian kernel build, and a separate
Comment on lines +22 to +23
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Kernel snaps are represented as a separate phase in the kernel workflow. There
will be a Workflow Tracker for each Debian kernel build, and a separate
Kernel snaps are represented as a separate phase in the kernel workflow. There
is a Workflow Tracker for each Debian kernel build, and a separate subordinate

I think the current tense can be used here since this is the situation right now.

subordinate tracker for the snap kernel build. The snap tracker will have the
Debian trackers as its parent and will proceed once that Debian tracker is
complete.
Comment on lines +25 to +26
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Debian trackers as its parent and will proceed once that Debian tracker is
complete.
Debian trackers as its parent and will proceed once that Debian tracker is complete.


Debian Pocket Usage
-------------------
Comment on lines +28 to +29
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Debian Pocket Usage
-------------------
Debian pocket usage
-------------------

The Debian package builds flow through their own life-cycle proceeding from the
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The Debian package builds flow through their own life-cycle proceeding from the
The Debian package builds flow through their own lifecycle proceeding from the

For consistency.

``build`` location, to ``proposed``, and onwards to ``updates`` and ``security`` as
testing allows.
Comment on lines +31 to +32
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
``build`` location, to ``proposed``, and onwards to ``updates`` and ``security`` as
testing allows.
``build`` location, to ``proposed``, and onward to ``updates`` and ``security``
as testing allows.

US spelling :D


Kernels in the ``build`` location are unsigned and intended for simple boot
testing or for testing for signing compliance. Kernels in ``proposed`` are
signed (if applicable) and formal candidates for regression and certification
testing.

Snap Risk Usage
---------------
Comment on lines +39 to +40
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Snap Risk Usage
---------------
Snap risk usage
---------------

Snaps on the ``edge`` channel are unsigned and intended for simple boot testing.
Snaps on the ``beta`` channel are signed and intended for certification testing.
The ``edge`` kernels are built using the Debian binaries in the ``build``
location. The ``beta`` kernels are built using the Debian binaries in the
``proposed`` locations.
Comment on lines +41 to +45
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a nitpick. But I think the content would be clearer if structured as a list or table.

List

- ``edge`` channel

  - Snaps are unsigned and intended for simple boot testing.
  - Kernel snaps are built from Debian binaries in the ``build`` location.
- ``beta`` channel

  - Snaps are signed and intended for certification testing.
  - Kernel snaps are built from Debian binaries in the ``proposed`` location.

Table

.. list-table::
   :header-rows: 1

   * - Risk (channel)
     - Purpose
     - Build source

   * - ``edge``
     - Snaps are unsigned and intended for simple boot testing.
     - Kernel snaps are built from Debian binaries in the ``build`` location.

   * - ``beta``
     - Snaps are signed and intended for certification testing.
     - Kernel snaps are built from Debian binaries in the ``proposed`` location.

Example of rendered screenshot with a table and list.

Image


Track Usage
-----------
Comment on lines +47 to +48
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Track Usage
-----------
Track usage
-----------

We make heavy use of store tracks to separate series specific snaps from each
other. For Ubuntu LTS releases which align with Ubuntu Core releases those
tracks are typically the Ubuntu Core release years (for example ``24``). For
interim Ubuntu releases these are the full release name (for example
``24.10``).

Where a series has a hardware enablement kernel (:ref hwe-kernels) those are
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Where a series has a hardware enablement kernel (:ref hwe-kernels) those are
Where a series has a hardware enablement kernel (:doc:`hwe-kernels`), those are

placed on the HWE specific tracks (for example ``24-hwe``).

Unsigned Kernels
----------------
Comment on lines +58 to +59
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Unsigned Kernels
----------------
Unsigned kernels
----------------

Unsigned kernels such as the ``pi-kernel`` will be directly generated in the
Debian ``main`` package. The ``linux-image`` packages are consumed and
``ubuntu-core-initramfs`` used to generate an initramfs to accompany it. These
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
``ubuntu-core-initramfs`` used to generate an initramfs to accompany it. These
``ubuntu-core-initramfs`` is used to generate an initramfs to accompany it. These

are packaged up along with any required firmware.

Signed Kernels
--------------
Comment on lines +65 to +66
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Signed Kernels
--------------
Signed kernels
--------------

Signed kernel such as the ``pc-kernel`` will be generated in the Debian
``main`` package, and passed through the signing pipeline as part of the Debian
``signed`` package. The ``linux-image`` packages (now generated by the
``signed`` package) are consumed and ``ubuntu-core-initramfs`` used to generate
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
``signed`` package) are consumed and ``ubuntu-core-initramfs`` used to generate
``signed`` package) are consumed and ``ubuntu-core-initramfs`` is used to generate

an initramfs to accompany it. These are packaged up along with any required
firmware. ``ubuntu-cre-initramfs`` is installed and envoked as part of the
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
firmware. ``ubuntu-cre-initramfs`` is installed and envoked as part of the
firmware. ``ubuntu-cre-initramfs`` is installed and invoked as part of the

kernel postinst.d handling to convert the existing ``vmlinux-<verflav>`` image
into a ``kernel.efi-<verflav>`` image.
Comment on lines +73 to +74
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
kernel postinst.d handling to convert the existing ``vmlinux-<verflav>`` image
into a ``kernel.efi-<verflav>`` image.
kernel :spellexception:`postinst.d`` handling to convert the existing
``vmlinux-<verflav>`` image into a ``kernel.efi-<verflav>`` image.

To avoid the CI flagging the spelling error.


Kernel UKIs
-----------
Comment on lines +76 to +77
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Kernel UKIs
-----------
Kernel UKIs
-----------

For kernels use cases which require measurement we also produce Unified Kernel
Images. That is a bootable PE executable which contains the kernel binary, an
initramfs, and the kernel command line. This UKI is generated in the
Comment on lines +78 to +80
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For kernels use cases which require measurement we also produce Unified Kernel
Images. That is a bootable PE executable which contains the kernel binary, an
initramfs, and the kernel command line. This UKI is generated in the
For kernels use cases which require measurement we also produce Unified Kernel
Images (UKIs). That is a bootable PE executable which contains the kernel
binary, an initramfs, and the kernel command line. This UKI is generated in the

``linux-signed`` package through use of an additional mode of the
``ubuntu-core-initramfs`` tooling. This process produces a single binary and
is signed after it is combined via the signing pipeline.

Stubble Kernels
---------------
Comment on lines +85 to +86
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Stubble Kernels
---------------
Stubble kernels
---------------

On arm64 we have an additional problem. For a number of platforms the ``dtb``
is not correctly supplied by the firmware. To handle these cases a ``stubble``
wrapper is used to detect those platforms and to inject the appropriate ``dtb``
as appropriate, then handing off control to the wrapped kernel image. The
kernel image is taken from the Debian ``linux-image`` package in the normal
way. The ``stubble-kernel`` package is installed and envoked as part of the
kernel postinst.d handling to convert the existing ``vmlinuz-<verflav>`` image
into a ``stubble.efi-<verflav>`` image.
Comment on lines +87 to +94
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
On arm64 we have an additional problem. For a number of platforms the ``dtb``
is not correctly supplied by the firmware. To handle these cases a ``stubble``
wrapper is used to detect those platforms and to inject the appropriate ``dtb``
as appropriate, then handing off control to the wrapped kernel image. The
kernel image is taken from the Debian ``linux-image`` package in the normal
way. The ``stubble-kernel`` package is installed and envoked as part of the
kernel postinst.d handling to convert the existing ``vmlinuz-<verflav>`` image
into a ``stubble.efi-<verflav>`` image.
On arm64 we have an additional problem. For a number of platforms the ``dtb``
is not correctly supplied by the firmware. To handle these cases a ``stubble``
wrapper is used to detect those platforms and to inject the appropriate ``dtb``
as needed, then hand off control to the wrapped kernel image. The kernel image
is taken from the Debian ``linux-image`` package in the normal way. The
``stubble-kernel`` package is installed and invoked as part of the kernel
:spellexception:`postinst.d` handling to convert the existing
``vmlinuz-<verflav>`` image into a ``stubble.efi-<verflav>`` image.


Snap Workflow Lifecycle
=======================
Comment on lines +96 to +97
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Snap Workflow Lifecycle
=======================
Snap workflow lifecycle
=======================

The snap workflow lifecycle runs in parallel to and interlocked with the Debian
Workflow lifecycle. This ensures that the snap workflow waits for the
prerequisite binaries. It also ensures that testing of both Debian packages
and snap must be complete before they can progress further. Finally ensuring
that the Debian packages and Snaps release together.

Unsigned Build
--------------
Comment on lines +104 to +105
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Unsigned Build
--------------
Unsigned build
--------------

When a Debian kernel build completes in the ``build`` location the ``edge``
build of the Snap is triggered. This causes an auto-crank of the snap which
parameterises the snapcraft.yaml configuration, and kicks off builds against
the appropriate snap build recipe. This causes the kernel to be processed into
a snap and uploaded to the snap-store. The store will automatically publish this
onto the ``edge`` channel for testing.
Comment on lines +106 to +111
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When a Debian kernel build completes in the ``build`` location the ``edge``
build of the Snap is triggered. This causes an auto-crank of the snap which
parameterises the snapcraft.yaml configuration, and kicks off builds against
the appropriate snap build recipe. This causes the kernel to be processed into
a snap and uploaded to the snap-store. The store will automatically publish this
onto the ``edge`` channel for testing.
When a Debian kernel build completes in the ``build`` location, the ``edge``
build of the Snap is triggered. This causes an auto-crank of the snap which
parameterizes the :file:`snapcraft.yaml` configuration, and kicks off builds
against the appropriate snap build recipe. This causes the kernel to be
processed into a snap and uploaded to the snap-store. The store will
automatically publish this onto the ``edge`` channel for testing.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there are test failures for the snap in "edge", does that gate the progress of the Debian package to "proposed"?


Early Testing
-------------
Comment on lines +113 to +114
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Early Testing
-------------
Early testing
-------------

Once published we trigger any available early testing. This includes ``boot-testing``,
``abi-testing`` and ``signing-signoff``. Once each of these is successfully completed
the Debian package may progress into the signing pipeline and on into its ``proposed`` location.
Comment on lines +115 to +117
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once published we trigger any available early testing. This includes ``boot-testing``,
``abi-testing`` and ``signing-signoff``. Once each of these is successfully completed
the Debian package may progress into the signing pipeline and on into its ``proposed`` location.
Once published we trigger any available early testing. This includes
``boot-testing``, ``abi-testing`` and ``signing-signoff``. Once each of these
is successfully completed, the Debian package may progress into the signing
pipeline and on into its ``proposed`` location.


Proposed Build
--------------
Comment on lines +119 to +120
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Proposed Build
--------------
Proposed build
--------------

Once the Debian kernel is in its ``proposed`` location a second auto-crank is
triggered to process the kernel into a snap via a second snap recipe. This
causes the kernel to be uploaded to the ``beta`` channel ready for wider formal
testing.

For signed kernels this ensures the snap on the ``beta`` channel has a signed
payload. We also regenerate the snap for unsigned kernel, while this may seem
redundant it allows us to perform experimental builds only to ``edge`` without
disrupting the workflow once the build has progressed to ``beta``.
Comment on lines +121 to +129
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once the Debian kernel is in its ``proposed`` location a second auto-crank is
triggered to process the kernel into a snap via a second snap recipe. This
causes the kernel to be uploaded to the ``beta`` channel ready for wider formal
testing.
For signed kernels this ensures the snap on the ``beta`` channel has a signed
payload. We also regenerate the snap for unsigned kernel, while this may seem
redundant it allows us to perform experimental builds only to ``edge`` without
disrupting the workflow once the build has progressed to ``beta``.
Once the Debian kernel is in its ``proposed`` location a second auto-crank is
triggered to process the kernel into a snap via a second snap recipe. This
causes the kernel to be uploaded to the ``beta`` channel, ready for wider formal
testing.
For signed kernels this ensures the snap on the ``beta`` channel has a signed
payload. We also regenerate the snap for unsigned kernel. While this may seem
redundant it allows us to perform experimental builds only to ``edge`` without
disrupting the workflow once the build has progressed to ``beta``.


Testing
-------
Comment on lines +131 to +132
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Testing
-------
Testing
-------

Once we have a snap on the ``beta`` channel formal testing is triggered. This
includes ``certification-testing`` for the snap. Once this testing is complete
the snap will be promoted to the ``candidate`` channel.

QA Testing
----------
Comment on lines +137 to +138
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
QA Testing
----------
QA testing
----------

Once we have a formal canidate snap this may be sent for further acceptance
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once we have a formal canidate snap this may be sent for further acceptance
Once we have a formal candidate snap this may be sent for further acceptance

testing in QA. Testing for the Debian package and snap are combined and gate
the further promotion of both. Promotion is further gated by any applicable
signoff tasks.

Release
-------
Comment on lines +144 to +145
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Release
-------
Release
-------

Once all gating factors, testing, signoff, and cycle boundaries are satisfied
the snap will be promoted to the ``stable`` channel, this occurs in lock-step
with the promotion of the Debian package to ``updates``. The Debian package my
then promote further to ``security`` but there is no equivalent channel for
Comment on lines +148 to +149
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
with the promotion of the Debian package to ``updates``. The Debian package my
then promote further to ``security`` but there is no equivalent channel for
with the promotion of the Debian package to ``updates``. The Debian package
may then promote further to ``security`` but there is no equivalent channel for

snaps.
Loading