Verify and Install a Release¶
How to download, verify and install a kernel release published by
cordanaLLM/nucleus.
1. What a Release Contains¶
A kernel release is tagged v<version>-<stream>-lusoris<N> (Packaging, section 5.4). Pick the tag from the releases list: on the forge, Latest marks the newest mainstream kernel release, while release candidates (~rc versions) are marked as prereleases and repository tooling releases (nucleus-v*) are not-latest. Releases published before this rule took effect keep their old marking, so a tooling release can still show as Latest until the next mainstream release.
Each kernel release carries eleven assets, the files the Publish to GitHub Release step of .github/workflows/publish-release.yml uploads:
| Asset | Content |
|---|---|
linux-image-<kernelrelease>_<pkgversion>_amd64.deb |
The kernel image and its modules |
linux-headers-<kernelrelease>_<pkgversion>_amd64.deb |
Headers for building out-of-tree modules |
linux-libc-dev_<pkgversion>_amd64.deb |
Kernel headers for userspace |
vmlinuz-<kernelrelease> |
The kernel image of the image package, as a single file |
kernel-<stream>-x86_64.config |
The resolved configuration, the same file as /boot/config-<kernelrelease> |
kernel-<stream>.cdx.json |
CycloneDX inventory of the release directory (syft) |
kernel-<stream>.spdx.json |
SPDX inventory of the release directory (syft) |
kernel-<stream>.manifest.json |
Digests and provenance for cordanaLLM/imago (imago.nucleus.kernel-artifact.v1) |
SHA256SUMS |
Checksums of the seven files above the manifest |
SHA256SUMS.bundle |
Keyless cosign signature and certificate over SHA256SUMS |
kernel-<stream>.provenance.sigstore.json |
SLSA Build Level 3 build provenance attestation bundle (actions/attest-build-provenance) |
For a stable version, <kernelrelease> is <version>-lusoris<N>-<stream> and <pkgversion> is <version>-lusoris<N>. A release candidate is spelled differently in both; Packaging, section 2.2, gives the rule.
2. Download¶
The same files are on the release's page in the releases list.
3. Verify¶
Check the signature over the checksum file first, then the files against it. The certificate names the workflow and the tag that built the release:
cosign verify-blob --bundle SHA256SUMS.bundle --certificate-identity "https://github.com/cordanaLLM/nucleus/.github/workflows/release-build.yml@refs/tags/<release-tag>" --certificate-oidc-issuer https://token.actions.githubusercontent.com SHA256SUMS
cosign prints Verified OK. It refuses a SHA256SUMS with a changed byte, and a certificate that another workflow obtained.
For releases built under SLSA Build Level 3, the signer identity is https://github.com/cordanaLLM/nucleus/.github/workflows/release-build.yml@refs/tags/<release-tag>. The 20 legacy tags listed in release-signers.json (every kernel release published up to 2026-10-15) were built and signed directly by .github/workflows/publish-release.yml (https://github.com/cordanaLLM/nucleus/.github/workflows/publish-release.yml@refs/tags/<release-tag>). You can run python3 scripts/release_signer_identity.py --repo cordanaLLM/nucleus --tag <release-tag> to print the exact expected identity for any release tag.
To verify SLSA Build Level 3 build provenance for any published release artifact:
Offline, pass the release's own attestation bundle: gh attestation verify <file> -R cordanaLLM/nucleus --bundle kernel-<stream>.provenance.sigstore.json. Releases among the 20 legacy tags carry no attestation.
Seven lines end in OK. The manifest, the provenance bundle, and the cosign bundle are not listed, because the workflow writes them after the checksum file.
Before the workflow signs, scripts/check_kernel_artifacts.py has opened every package and scripts/boot_smoke.py has booted the kernel under QEMU (Packaging, sections 2.4 and 2.5).
4. Install¶
On a Debian or Ubuntu host of the amd64 architecture:
The image package places /boot/vmlinuz-<kernelrelease>, /boot/config-<kernelrelease>, /boot/System.map-<kernelrelease> and /lib/modules/<kernelrelease>; dpkg -c lists the content of a package before it is installed.
Its maintainer script then runs the hooks the host keeps in /etc/kernel/postinst.d and /usr/share/kernel/postinst.d. The initramfs and the boot entry come from those hooks, which belong to the host's initramfs generator and boot loader packages; nucleus ships none. dpkg --ctrl-tarfile linux-image-*.deb | tar -xO ./postinst prints the script.
.github/workflows/package-lifecycle.yml performs sections 2–4 weekly on the two newest revisions of every stream, in a container with initramfs-tools and kmod. When a stream version is bumped in versions.json before a release is published, the workflow substitutes the stream's most recently published version for up to 7 days after the bump. It verifies clean package installation, side-by-side coexistence of successive kernel releases, byte-identity of /boot/vmlinuz-<kernelrelease> and /boot/config-<kernelrelease> against the release assets, generation of /boot/initrd.img-<kernelrelease> by the host's postinst hook, and clean uninstallation via dpkg --purge without leftover files in /boot, /lib/modules, or /usr/src.
5. Not Provided Today¶
- Other architectures: a release is
x86_64only.build-matrix.ymlcompiles and gatesarm64andriscv64kernels, and no workflow publishes them. - An APT archive: the packages are release assets, so
aptdoes not deliver an update. - A Secure Boot signature: no step signs the kernel image (
git grep -n -iE "sbsign|pesign" -- scripts .github/workflowsfinds nothing). - A Unified Kernel Image: no release workflow publishes one (Packaging, section 3).
- A tested boot from the installed package: the workflow boots the kernel image directly; the host's hooks and boot loader are not part of any test here.