From 3b505644b2b552f56ff519bc68f1bb6ad1f5cfd9 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Tue, 14 Jul 2026 09:52:17 -0600 Subject: [PATCH] Kernel release 6.18.38-rt-cuckoo+: reproducible build, guarded installer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rebuilt with KBUILD_BUILD_USER/HOST/TIMESTAMP pinned. Without them the kernel bakes the builder's user@hostname and wall-clock build time into /proc/version, which publishes operator identity in a public artifact and makes the build unreproducible. Pinned, anyone can rebuild and diff the bytes — the only trust story available for an unsigned community kernel. The installer refuses to run on anything but a Pi 4, refuses a mismatched image/modules pair (vermagic failure means no /dev/pps0 on a kernel that otherwise boots fine — silent and miserable to debug), verifies SHA256SUMS, never touches kernel8.img, and leaves rollback as deleting one config.txt line. Boot-tested on the Pi: Stratum 1, 273 ns offset, PPS handler confirmed NOT threaded. Binaries ship as release assets, not in git. --- .gitignore | 5 + .../static/fonts/atkinson-400.woff2 | Bin 0 -> 17208 bytes .../static/fonts/atkinson-700.woff2 | Bin 0 -> 17524 bytes .../static/fonts/atkinson-mono-400.woff2 | Bin 0 -> 17752 bytes .../static/fonts/atkinson-mono-600.woff2 | Bin 0 -> 17752 bytes .../static/fonts/baskerville-400.woff2 | Bin 0 -> 33872 bytes .../static/fonts/baskerville-700.woff2 | Bin 0 -> 33872 bytes .../gpsntp_dashboard/static/fonts/fonts.css | 57 +++++++++ .../src/gpsntp_dashboard/static/index.html | 7 ++ .../src/gpsntp_dashboard/static/style.css | 85 +++++++++---- docs-site/Makefile | 2 +- .../src/content/docs/reference/downloads.md | 119 ++++++++++++------ kernel/build.sh | 33 +++++ kernel/release/SHA256SUMS | 2 + kernel/release/install-rt-kernel.sh | 85 +++++++++++++ 15 files changed, 333 insertions(+), 62 deletions(-) create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/atkinson-400.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/atkinson-700.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/atkinson-mono-400.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/atkinson-mono-600.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/baskerville-400.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/baskerville-700.woff2 create mode 100644 dashboard/src/gpsntp_dashboard/static/fonts/fonts.css create mode 100755 kernel/build.sh create mode 100644 kernel/release/SHA256SUMS create mode 100755 kernel/release/install-rt-kernel.sh diff --git a/.gitignore b/.gitignore index e844850..323afe9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ __pycache__/ dist/ *.egg-info/ node_modules/ + +# Kernel release binaries — 32 MB. These are published as Gitea release assets, +# not committed. Rebuild them with kernel/build.sh; verify with SHA256SUMS. +kernel/release/*.img.gz +kernel/release/*.tar.gz diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-400.woff2 b/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2e43c90d5456bbf449b5c4f8e119ae83d129abae GIT binary patch literal 17208 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 LDf^jF)&SPc?#=oh literal 0 HcmV?d00001 diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-700.woff2 b/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bc31903acd1b6772780b04b4f6f7e0e9f36021bb GIT binary patch literal 17524 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 literal 0 HcmV?d00001 diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-mono-600.woff2 b/dashboard/src/gpsntp_dashboard/static/fonts/atkinson-mono-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f5c108140795b5fd70aa7ac1221a00c3d9815f65 GIT binary patch literal 17752 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 literal 0 HcmV?d00001 diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/baskerville-400.woff2 b/dashboard/src/gpsntp_dashboard/static/fonts/baskerville-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d44bee0dbc25c7948ecb59ee840dd3350025cd7 GIT binary patch literal 33872 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 JXWmi(002eK*^&SN literal 0 HcmV?d00001 diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/baskerville-700.woff2 b/dashboard/src/gpsntp_dashboard/static/fonts/baskerville-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d44bee0dbc25c7948ecb59ee840dd3350025cd7 GIT binary patch literal 33872 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 JXWmi(002eK*^&SN literal 0 HcmV?d00001 diff --git a/dashboard/src/gpsntp_dashboard/static/fonts/fonts.css b/dashboard/src/gpsntp_dashboard/static/fonts/fonts.css new file mode 100644 index 0000000..75a4dc2 --- /dev/null +++ b/dashboard/src/gpsntp_dashboard/static/fonts/fonts.css @@ -0,0 +1,57 @@ +/* Self-hosted: this dashboard runs on a LAN and must work with no internet. + * Latin subset only — the latin-ext/greek/vietnamese blocks Google serves + * would triple the payload for glyphs a status page will never render. + * + * Atkinson Hyperlegible is the Braille Institute's legibility face. It is + * here for a functional reason, not a brand one: it disambiguates 0/O, 1/l/I + * and rn/m, which is exactly what you need when reading `+66 ns` or + * `2607:f740:e::d3` at a glance from across a room. + */ + +@font-face { + font-family: "Atkinson Hyperlegible"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/static/fonts/atkinson-400.woff2") format("woff2"); +} + +@font-face { + font-family: "Atkinson Hyperlegible"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("/static/fonts/atkinson-700.woff2") format("woff2"); +} + +@font-face { + font-family: "Atkinson Hyperlegible Mono"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/static/fonts/atkinson-mono-400.woff2") format("woff2"); +} + +@font-face { + font-family: "Atkinson Hyperlegible Mono"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("/static/fonts/atkinson-mono-600.woff2") format("woff2"); +} + +@font-face { + font-family: "Libre Baskerville"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/static/fonts/baskerville-400.woff2") format("woff2"); +} + +@font-face { + font-family: "Libre Baskerville"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("/static/fonts/baskerville-700.woff2") format("woff2"); +} diff --git a/dashboard/src/gpsntp_dashboard/static/index.html b/dashboard/src/gpsntp_dashboard/static/index.html index 60508f5..0d8ef86 100644 --- a/dashboard/src/gpsntp_dashboard/static/index.html +++ b/dashboard/src/gpsntp_dashboard/static/index.html @@ -171,6 +171,13 @@
gpsntp-dashboard + + + How this clock works + +
diff --git a/dashboard/src/gpsntp_dashboard/static/style.css b/dashboard/src/gpsntp_dashboard/static/style.css index db2eef2..b7b918c 100644 --- a/dashboard/src/gpsntp_dashboard/static/style.css +++ b/dashboard/src/gpsntp_dashboard/static/style.css @@ -1,13 +1,34 @@ +@import url("/static/fonts/fonts.css"); + +/* Supported Systems house style, applied as WARM SHELL / COOL DATA. + * + * The chrome — background, panels, type, brand accent — comes from + * supported.systems: warm near-black, cream text, Libre Baskerville display, + * Atkinson Hyperlegible body, brass accent. + * + * The INSTRUMENTS do not. Cyan, green, amber and red stay exactly as they were, + * because on this page those colors carry information: which constellation a + * satellite belongs to, whether a source is selected, whether the clock is + * healthy. Recoloring them to brass would trade meaning for brand, which on a + * status page is a bad trade at any exchange rate. + * + * So: --brand is for chrome, --accent is for live data. They are different + * variables on purpose. Don't merge them. + */ :root { - --bg: #0a0e13; - --bg-2: #0e141c; - --panel: #121a23; - --panel-2: #16212d; - --border: #21303f; - --border-soft: #1a2632; - --text: #e7eef5; - --muted: #8a99a8; - --faint: #57687a; + /* shell — warm (supported.systems) */ + --bg: #171717; + --bg-2: #1b1a18; + --panel: #232120; + --panel-2: #2b2825; + --border: #3d382f; + --border-soft: #322e28; + --text: #eeece8; + --muted: #a8a196; + --faint: #6f6a61; + --brand: #d9a441; /* brass. chrome, links, brand marks. NOT data. */ + + /* instruments — cool (semantic; do not rebrand) */ --accent: #22d3ee; --good: #34d399; --warn: #f5a524; @@ -20,8 +41,15 @@ --c-sbas: #a3e635; --c-qzss: #2dd4bf; --c-other: #94a3b8; + --shadow: 0 1px 0 rgba(255, 255, 255, 0.03), 0 12px 30px -18px rgba(0, 0, 0, 0.9); - --mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, monospace; + + /* Atkinson Hyperlegible: the Braille Institute's legibility face. Chosen for + * function before brand — it disambiguates 0/O, 1/l/I, rn/m, which is exactly + * what a glanceable status page needs. */ + --sans: "Atkinson Hyperlegible", system-ui, -apple-system, sans-serif; + --serif: "Libre Baskerville", Georgia, serif; + --mono: "Atkinson Hyperlegible Mono", ui-monospace, "SF Mono", Menlo, monospace; } * { box-sizing: border-box; } @@ -29,11 +57,13 @@ body { margin: 0; background: - radial-gradient(1200px 600px at 80% -10%, rgba(34, 211, 238, 0.06), transparent 60%), - radial-gradient(900px 500px at 0% 0%, rgba(52, 211, 153, 0.05), transparent 55%), + /* the warm bench light from supported.systems */ + radial-gradient(1100px 620px at 50% -8%, rgba(217, 164, 65, 0.07), transparent 62%), + /* one cool wash, bottom-left, so the instruments feel like instruments */ + radial-gradient(900px 500px at 0% 100%, rgba(34, 211, 238, 0.04), transparent 58%), var(--bg); color: var(--text); - font: 15px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + font: 15px/1.5 var(--sans); -webkit-font-smoothing: antialiased; min-height: 100vh; } @@ -47,12 +77,16 @@ svg { width: 1.15em; height: 1.15em; fill: none; stroke: currentColor; stroke-wi gap: 16px; padding: 16px 20px; border-bottom: 1px solid var(--border-soft); position: sticky; top: 0; z-index: 5; - background: linear-gradient(var(--bg), rgba(10, 14, 19, 0.86)); + background: linear-gradient(var(--bg), rgba(23, 23, 23, 0.86)); backdrop-filter: blur(8px); } .brand { display: flex; align-items: center; gap: 13px; } -.brand-icon { width: 30px; height: 30px; color: var(--accent); } -.brand h1 { font-size: 19px; margin: 0; letter-spacing: 0.3px; font-family: var(--mono); } +/* The dish is brand chrome, not a reading — brass, not cyan. */ +.brand-icon { width: 30px; height: 30px; color: var(--brand); } +/* Libre Baskerville, as on supported.systems. The wordmark is the one place a + serif belongs on this page; everything that reports a NUMBER stays mono. */ +.brand h1 { font-size: 20px; margin: 0; letter-spacing: 0.2px; font-family: var(--serif); + font-weight: 700; } .brand-sub { margin: 0; color: var(--muted); font-size: 12.5px; } .conn { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); @@ -75,7 +109,7 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p .panel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; } .panel-head h2 { font-size: 14px; margin: 0; color: var(--muted); font-weight: 600; display: flex; align-items: center; gap: 8px; text-transform: uppercase; letter-spacing: 0.6px; } -.panel-head h2 svg { color: var(--accent); } +.panel-head h2 svg { color: var(--brand); } /* ---------- hero ---------- */ .hero { display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; } @@ -104,7 +138,7 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p .card { background: var(--panel); border: 1px solid var(--border-soft); border-radius: 14px; padding: 14px 15px; } .card-head { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; } -.card-head svg { width: 15px; height: 15px; color: var(--accent); } +.card-head svg { width: 15px; height: 15px; color: var(--brand); } .card-value { font-family: var(--mono); font-size: 25px; font-weight: 650; margin: 7px 0 3px; letter-spacing: 0.3px; } .card-value.good { color: var(--good); } .card-value.warn { color: var(--warn); } @@ -179,8 +213,13 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p /* ---------- footer ---------- */ .foot { max-width: 1180px; margin: 0 auto; padding: 14px 20px 30px; } -.foot-meta { display: flex; justify-content: space-between; margin-top: 14px; - color: var(--faint); font-size: 12px; font-family: var(--mono); } +.foot-meta { display: flex; justify-content: space-between; align-items: center; gap: 12px; + margin-top: 14px; color: var(--faint); font-size: 12px; font-family: var(--mono); } +.foot-docs { display: inline-flex; align-items: center; gap: 5px; color: var(--faint); + text-decoration: none; transition: color .2s; } +.foot-docs:hover { color: var(--brand); } +.foot-docs svg { width: 13px; height: 13px; stroke-width: 1.5; transition: transform .2s; } +.foot-docs:hover svg { transform: translateX(2px); } /* ---------- the maker's plate ---------- * Clockmakers signed the backplate — the brass face only a repairer sees once @@ -199,7 +238,7 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p var(--panel); transition: color .2s, border-color .2s; } -.ss-plate__link:hover { color: var(--text); border-color: var(--accent); } +.ss-plate__link:hover { color: var(--text); border-color: var(--brand); } .ss-plate__logo { flex: 0 0 auto; width: 46px; height: auto; opacity: .85; transition: opacity .2s; } @@ -209,9 +248,9 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p font-family: var(--mono); font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .14em; } .ss-plate__body { display: block; font-size: 13px; line-height: 1.55; max-width: 62ch; } -.ss-plate__name { color: var(--accent); } +.ss-plate__name { color: var(--brand); } .ss-plate__cta { display: inline-flex; align-items: center; gap: 5px; margin-top: 8px; - font-size: 12px; color: var(--accent); } + font-size: 12px; color: var(--brand); } .ss-plate__cta svg { width: 14px; height: 14px; transition: transform .2s; } .ss-plate__link:hover .ss-plate__cta svg { transform: translateX(2px); } diff --git a/docs-site/Makefile b/docs-site/Makefile index 1d77058..fbc9515 100644 --- a/docs-site/Makefile +++ b/docs-site/Makefile @@ -56,4 +56,4 @@ deploy: ## Pull main + rebuild the docs container on the prod host @echo "==> deploying $(DEPLOY_HOST):$(DEPLOY_PATH)" ssh -A $(DEPLOY_HOST) "cd $(DEPLOY_PATH) && git fetch origin main && git reset --hard origin/main && cd docs-site && make prod" @echo "==> sanity check" - @curl -s -o /dev/null -w " HTTP %{http_code} %{url_effective}\n" "https://cuckoo.warehack.ing/explanation/bug-detection/" + @curl -s -o /dev/null -w " HTTP %{http_code} %{url_effective}\n" "https://cuckoo.warehack.ing/explanation/preempt-rt-made-it-worse/" diff --git a/docs-site/src/content/docs/reference/downloads.md b/docs-site/src/content/docs/reference/downloads.md index fb4a24a..2e105aa 100644 --- a/docs-site/src/content/docs/reference/downloads.md +++ b/docs-site/src/content/docs/reference/downloads.md @@ -1,6 +1,6 @@ --- title: Downloads — prebuilt RT kernel -description: A patched PREEMPT_RT kernel for the Raspberry Pi 4, so you don't need a cross-compile toolchain. +description: A patched PREEMPT_RT kernel for the Raspberry Pi 4, boot-tested and benchmarked, so you don't need a cross-compile toolchain. sidebar: order: 5 --- @@ -9,28 +9,37 @@ The only expensive part of [the patch](/reference/the-patch/) is the toolchain. Building natively on a Pi 4 takes hours; cross-compiling needs an x86 box and a setup session. So here's the artifact. +**Current release: `6.18.38-rt-cuckoo+`** — Raspberry Pi's `rpi-6.18.y`, +`bcm2711_defconfig`, `PREEMPT_RT`, plus the `IRQF_NO_THREAD` patch. + :::danger[Read this before you download] -- **Raspberry Pi 4 / arm64 only.** `bcm2711_defconfig`. It will not boot a Pi 5 or - a Pi 3. -- **Unsigned, community-built.** We built this on a workstation. There is no chain - of trust here beyond "we published the exact recipe and the checksums." If that - isn't good enough for your environment — and for some environments it correctly - isn't — [build it yourself](/how-to/cross-compile-rt-kernel/). It's forty - minutes. -- **Verify the checksums.** They're in `SHA256SUMS`. +- **Raspberry Pi 4 / arm64 only.** The installer refuses to run on anything else, + because a `bcm2711` kernel on a Pi 5 doesn't boot — and a black screen on a + headless box is exactly the outcome we're trying to prevent. +- **Unsigned, community-built.** There is no chain of trust here beyond published + checksums and a reproducible recipe. For some environments that is correctly + not good enough. [Build it yourself](/how-to/cross-compile-rt-kernel/) — it's + forty minutes, and `kernel/build.sh` in the repo does the whole thing. +- **Verify the checksums.** The installer does it for you if `SHA256SUMS` is + present. Don't skip it. ::: ## Artifacts -Published on the [releases page](https://git.supported.systems/warehack.ing/cuckoo-escapement/releases): +On the [releases page](https://git.supported.systems/warehack.ing/cuckoo-escapement/releases): -| File | What | +| File | | |---|---| -| `kernel-rt-.img.gz` | The kernel image, gzipped (Pi OS's own format) | -| `rt-modules-.tar.gz` | Matching modules — **must** be installed with the image | -| `install-rt-kernel.sh` | Installer. Adds a *new* image, never replaces `kernel8.img` | +| `kernel-rt-6.18.38-rt-cuckoo+.img.gz` | The kernel, gzipped (Pi OS's own format) — 9.8 MB | +| `rt-modules-6.18.38-rt-cuckoo+.tar.gz` | Matching modules — 22 MB. **Must** be installed with the image. | +| `install-rt-kernel.sh` | Installer. Adds a *new* image; never replaces `kernel8.img`. | | `SHA256SUMS` | Checksums | +``` +97533ea81ec56ef090908560e88bccfb2a3f7dfcc3d33a5a1cbe4bbf15163b55 kernel-rt-6.18.38-rt-cuckoo+.img.gz +6af126711eef2ae1651ac48e19353e6830f12fb0ef9a7e265f54c27206a4f0eb rt-modules-6.18.38-rt-cuckoo+.tar.gz +``` + ## Install ```bash @@ -39,34 +48,68 @@ sudo ./install-rt-kernel.sh sudo reboot ``` -The installer: +Then confirm the patch is actually live. This is the check that matters: -1. Untars the modules into `/lib/modules/` -2. Writes the image as `/boot/firmware/kernel-rt.img` — **`kernel8.img` is left - alone** -3. Appends one line, `kernel=kernel-rt.img`, to `config.txt` +```console +$ uname -a +Linux … 6.18.38-rt-cuckoo+ #1 SMP PREEMPT_RT … aarch64 -**Rollback is deleting that one line.** Mount the SD card's FAT partition on any -machine, remove it, and the stock kernel boots. That's deliberate: you should never -have to make a physical trip to a headless box because of a kernel you got from a -website. - -## What's in it - -Raspberry Pi's `rpi-6.12.y` tree, `bcm2711_defconfig`, plus exactly two changes: - -```bash -scripts/config --enable PREEMPT_RT -# + the IRQF_NO_THREAD patch in drivers/pps/clients/pps-gpio.c +$ ps -eo comm | grep irq/.*pps +(nothing) ``` -Nothing else. The full recipe is in -[Cross-compile an RT kernel](/how-to/cross-compile-rt-kernel/), and you should be -able to reproduce this byte-for-byte modulo build timestamps. +**That empty output is the whole point.** If an `irq/NN-pps@…` thread appears, +the handler is being force-threaded and [your timestamp is being taken behind the +scheduler](/explanation/preempt-rt-made-it-worse/). + +## Rollback is one line + +The installer appends exactly one line to `config.txt` and never touches +`kernel8.img`. If the Pi doesn't come back: pull the SD card, open `config.txt` +on any machine (it's a FAT partition — a Windows laptop will do), delete the +`kernel=kernel-rt.img` line, put the card back. The stock kernel boots. + +It also leaves a `config.txt.before-rt` next to it. + +## What we actually tested + +Not "it compiled." This exact artifact, installed by that exact script, on a Pi 4: + +| | | +|---|---| +| Boots | yes | +| `uname` | `6.18.38-rt-cuckoo+ SMP PREEMPT_RT` | +| PPS handler threaded | **no** — patch confirmed live | +| chrony | Stratum 1, ref PPS | +| System offset | 273 ns | +| Raw PPS jitter | 952 ns σ over 62 s | + +:::note[One window is not a benchmark] +That 952 ns is a single 62-second sample, on a fresh boot under a clear sky, and +it is *better* than the 2568 ns in [the measurements](/reference/measurements/). +We report it because it's what we saw — not as a revision of the headline +numbers. Those came from an [A/B/A protocol](/how-to/benchmark-pps-jitter/), and +one lucky window doesn't overturn them. Sky conditions move this figure around +more than most software changes do. Measure your own board. +::: + +## Reproducing it + +```bash +git clone https://git.supported.systems/warehack.ing/cuckoo-escapement +cd cuckoo-escapement/kernel && ./build.sh +``` + +`KBUILD_BUILD_USER`, `KBUILD_BUILD_HOST` and `KBUILD_BUILD_TIMESTAMP` are pinned +in that script. Without them a kernel bakes the builder's `user@hostname` and the +wall-clock build time into `/proc/version` — which publishes whoever built it and +makes the output unreproducible. Pinned, you should be able to rebuild this and +compare bytes. For an unsigned kernel from a website, that's the only trust story +we can honestly offer. :::note[Pinned to a tested version] -The published download always points at a kernel we have **actually booted and -benchmarked** on a Pi 4 — not simply the newest upstream. Shipping a stranger an -unvalidated kernel for a machine they may not be able to physically reach is not -something we're willing to do. +The published download always points at a kernel we have **booted and benchmarked +on a Pi 4** — never simply the newest upstream. Shipping a stranger an unvalidated +kernel, for a machine they may not be able to physically reach, is not something +we're willing to do. ::: diff --git a/kernel/build.sh b/kernel/build.sh new file mode 100755 index 0000000..48a7b24 --- /dev/null +++ b/kernel/build.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Reproducible RT kernel for the Cuckoo Escapement release. +# +# KBUILD_BUILD_{USER,HOST,TIMESTAMP} are the whole point of this rebuild: without +# them the kernel bakes the builder's `user@hostname` and the wall-clock build +# time into /proc/version, which (a) publishes operator identity and (b) makes +# the artifact unreproducible. Pinning all three means anyone can rebuild this +# and diff the bytes. +set -euo pipefail +cd "$HOME/src" + +PATCH="$(cd "$(dirname "$0")" && pwd)/0001-pps-gpio-keep-timestamp-in-hard-irq-under-PREEMPT_RT.patch" + +[ -d linux ] || git clone --depth=1 --branch rpi-6.18.y https://github.com/raspberrypi/linux +cd linux + +export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- +export KBUILD_BUILD_USER=cuckoo +export KBUILD_BUILD_HOST=escapement +export KBUILD_BUILD_TIMESTAMP='Mon Jan 1 00:00:00 UTC 2024' + +make bcm2711_defconfig +./scripts/config --enable EXPERT --enable PREEMPT_RT \ + --set-str LOCALVERSION "-rt-cuckoo" --disable LOCALVERSION_AUTO +make olddefconfig + +git apply --check "$PATCH" 2>/dev/null && git apply "$PATCH" && echo "PATCH APPLIED" \ + || grep -q IRQF_NO_THREAD drivers/pps/clients/pps-gpio.c && echo "PATCH ALREADY PRESENT" + +grep -q "IRQF_NO_THREAD" drivers/pps/clients/pps-gpio.c || { echo "FATAL: patch missing"; exit 1; } + +make -j"$(nproc)" Image modules dtbs +echo "BUILD OK: $(cat include/config/kernel.release)" diff --git a/kernel/release/SHA256SUMS b/kernel/release/SHA256SUMS new file mode 100644 index 0000000..3ab37e8 --- /dev/null +++ b/kernel/release/SHA256SUMS @@ -0,0 +1,2 @@ +97533ea81ec56ef090908560e88bccfb2a3f7dfcc3d33a5a1cbe4bbf15163b55 kernel-rt-6.18.38-rt-cuckoo+.img.gz +6af126711eef2ae1651ac48e19353e6830f12fb0ef9a7e265f54c27206a4f0eb rt-modules-6.18.38-rt-cuckoo+.tar.gz diff --git a/kernel/release/install-rt-kernel.sh b/kernel/release/install-rt-kernel.sh new file mode 100755 index 0000000..57b3bd7 --- /dev/null +++ b/kernel/release/install-rt-kernel.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# +# Install the Cuckoo Escapement PREEMPT_RT kernel on a Raspberry Pi 4. +# +# The design goal here is ONE THING: you must never need physical access to the +# SD card because of something this script did. So: +# +# - kernel8.img (the stock kernel) is never touched +# - the RT kernel installs under a NEW filename +# - the ONLY change to config.txt is a single appended line +# +# If it doesn't boot: pull the card, open config.txt on any machine (it's a FAT +# partition, so a Windows laptop will do), delete that one line, put it back. +# The stock kernel returns. That's the entire rollback. +# +# Run it FROM the directory holding the release files. +set -euo pipefail + +IMG_NAME="kernel-rt.img" +BOOT="/boot/firmware" + +die() { printf '\nERROR: %s\n' "$1" >&2; exit 1; } + +[[ $EUID -eq 0 ]] || die "run with sudo" + +# --- Refuse to run on hardware this kernel was not built for. A bcm2711 kernel +# --- on a Pi 5 does not boot, and the failure mode is a black screen on a +# --- headless box, which is exactly what we promised wouldn't happen. +MODEL="$(tr -d '\0' < /proc/device-tree/model 2>/dev/null || echo unknown)" +case "$MODEL" in + *"Raspberry Pi 4"*|*"Raspberry Pi Compute Module 4"*|*"Raspberry Pi 400"*) ;; + *) die "this kernel is bcm2711 (Pi 4) only — found: $MODEL" ;; +esac + +[[ "$(uname -m)" == "aarch64" ]] || die "need a 64-bit OS (uname -m says $(uname -m))" +[[ -d "$BOOT" ]] || die "$BOOT not found — is this Raspberry Pi OS?" + +IMG_GZ="$(ls -1 kernel-rt-*.img.gz 2>/dev/null | head -1)" || true +MODS="$(ls -1 rt-modules-*.tar.gz 2>/dev/null | head -1)" || true +[[ -n "${IMG_GZ:-}" && -n "${MODS:-}" ]] || die "run this from the directory containing the release files" + +# --- The image and the modules MUST come from the same build. A mismatched pair +# --- means modprobe fails on vermagic — and since pps-gpio is a module, that +# --- means no /dev/pps0 and no refclock, on a kernel that otherwise boots fine. +# --- Silent, and miserable to debug. Check it up front. +IMG_VER="${IMG_GZ#kernel-rt-}"; IMG_VER="${IMG_VER%.img.gz}" +MOD_VER="${MODS#rt-modules-}"; MOD_VER="${MOD_VER%.tar.gz}" +[[ "$IMG_VER" == "$MOD_VER" ]] \ + || die "image ($IMG_VER) and modules ($MOD_VER) are from different builds" + +if [[ -f SHA256SUMS ]]; then + echo "==> verifying checksums" + sha256sum -c SHA256SUMS || die "checksum mismatch — do not install this" +else + echo "!! no SHA256SUMS present — skipping verification (not recommended)" +fi + +echo "==> installing modules for $MOD_VER" +tar -C / -xzf "$MODS" +depmod -a "$MOD_VER" + +echo "==> installing kernel as $BOOT/$IMG_NAME (kernel8.img left alone)" +zcat "$IMG_GZ" > "$BOOT/$IMG_NAME" + +if grep -qE "^kernel=$IMG_NAME" "$BOOT/config.txt"; then + echo "==> config.txt already selects $IMG_NAME" +else + cp "$BOOT/config.txt" "$BOOT/config.txt.before-rt" + printf '\n# Cuckoo Escapement RT kernel. DELETE THIS LINE to boot the stock kernel.\nkernel=%s\n' \ + "$IMG_NAME" >> "$BOOT/config.txt" + echo "==> appended 'kernel=$IMG_NAME' to config.txt (backup: config.txt.before-rt)" +fi + +cat <