README: add bootstrap reference build (2026-05-09 fresnel); drop distcc from build hosts; close issue-3 followup

This commit is contained in:
2026-05-09 19:03:56 +00:00
parent 5e661a4d2f
commit 49c5892a69
+84 -10
View File
@@ -167,11 +167,12 @@ Host Where Role Wake? Notes
boltzmann Rock 5 ITX+ aarch64 primary always container kbuild-aarch64 boltzmann Rock 5 ITX+ aarch64 primary always container kbuild-aarch64
fermi hertz LXD aarch64 fallback always matches kbuild-aarch64 profile fermi hertz LXD aarch64 fallback always matches kbuild-aarch64 profile
kbuild-x86 data CT x86_64 on-demand wakes via His; idle 30 min → release kbuild-x86 data CT x86_64 on-demand wakes via His; idle 30 min → release
tesla hertz LXD distcc helper always manual hosts list
dcc1 dcw3 Pi 4 distcc helper always zeroconf (bridge-detach risk)
dcc2 dcw2 Pi 4 distcc helper always zeroconf
``` ```
Native make on the assigned build host. **No distcc** for kernel-agent
builds (`feedback_kernel_agent_no_distcc.md`, locked 2026-05-09). ccache
stays per-host. distcc remains in scope for userspace package builds.
## Files / paths ## Files / paths
@@ -221,19 +222,92 @@ via `ka-snooze <issue-id> [--for <duration>]`.
- Refuse promote of patches lacking scope tag. - Refuse promote of patches lacking scope tag.
## Bootstrap reference build (2026-05-09 — fresnel)
First end-to-end run, before any `ka-*` CLI exists. Documented here as the
canonical worked example so future ka-* implementations have a concrete
substrate to replay. Issue #3 (fresnel DTS persistence) closed by this
build.
### Inputs
- **Baseline:** mmind/linux-rockchip @ `v7.0` (Heiko Stübner / Collabora,
via kernel.org).
- **Patches** (scope `board/pinebook-pro`):
- `0001-arm64-dts-rk3399-pinebook-pro-add-OC-OPP-tables-1704-2184.patch`
- `0002-arm64-dts-rk3399-pinebook-pro-enable-hdmi-sound.patch`
- `0003-arm64-dts-rk3399-pinebook-pro-spi1-max-freq-10MHz.patch`
- **Manifest:** `fleet/fresnel.yaml` (tree=mmind v7.0, 3 patches above,
alongside-install vs `linux-eos-arm`).
- **.config source:** snapshot from fresnel `/usr/lib/modules/6.19.10-1-eos-arm/build/.config`,
recovered from the data backintime backup (May 7 snapshot) since the
laptop was off when the build started; `make olddefconfig` to fold in
v7.0 new symbols (one harmless `BOOTPARAM_SOFTLOCKUP_PANIC` warning,
ignored).
### Manual substitute for each ka-* verb
| Designed verb | What we did manually |
|---|---|
| `ka-promote fresnel-fourier <patches> --to board/pinebook-pro` | Authored 3 patches with proper headers/scope tags, pushed to `marfrit/kernel-agent/patches/board/pinebook-pro/` via Gitea contents API as `claude-noether`. |
| `ka-build fresnel` | On boltzmann: cloned linux v7.0 from kernel.org, ran `makepkg -s --skipchecksums --skippgpcheck` against `marfrit-packages/arch/linux-fresnel-fourier/PKGBUILD`. Native aarch64 (boltzmann is RK3588). One headers-pkg bug discovered (`ln -sr` on missing parent dir) and fixed mid-flight. Repackaged. |
| `ka-sign + push` | scp pkgs hertz → `sudo /opt/herding/bin/marfrit-publish-arch aarch64 <pkg>` per pkg. Script signs with key `92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C`, runs repo-add, rsyncs to nc. |
| `ka-install fresnel` (consent-via-action) | `sudo pacman -U /tmp/<pkg>` over LAN scp (HTTPS to nc was throttled by fresnel's wifi). pacman post-transaction hook updated extlinux. mkinitcpio run manually because the standard hook trigger watches `vmlinuz` not `Image`. |
| Bar 1..3 verification | SSH heartbeat OK, `pacman -Q linux-fresnel-fourier` = `7.0-1`, post-reboot cluster0 1.704 GHz / cluster1 2.184 GHz confirmed. |
### Files / locations involved
- `git.reauktion.de/marfrit/kernel-agent/patches/board/pinebook-pro/` — patches
- `git.reauktion.de/marfrit/kernel-agent/fleet/fresnel.yaml` — manifest
- `git.reauktion.de/marfrit/marfrit-packages/arch/linux-fresnel-fourier/` — PKGBUILD + 3 patches + config + extlinux hook+script + mkinitcpio preset
- `boltzmann:~/src/kernel-agent-bootstrap/` — local build root (baseline clone, patches, build dir, artifacts)
- `hertz:/tmp/ka-publish/` — staging for sign+push (transient)
- `hertz:/sparfuxdata/kernel-agent-backups/fresnel/6.19.9-99-eos-arm/fresnel-boot-pre-install.tgz` — pre-install /boot snapshot (71MB, 7-day retention per design)
- `https://packages.reauktion.de/arch/aarch64/linux-fresnel-fourier-7.0-1-aarch64.pkg.tar.zst` — published artifact
- `fresnel:/boot/{Image,initramfs,dtbs}-fresnel-fourier{,/...}` — installed artifacts
- `fresnel:/boot/extlinux/extlinux.conf` — managed block tagged `>>> linux-fresnel-fourier (managed) >>>``<<<`
### What was learned that ka-* should bake in
- mkinitcpio's stock hook watches `vmlinuz`, not `Image`. ARM kernel installs
must explicitly run `mkinitcpio -p <preset>` from the install hook, OR
ship a custom alpm hook with `Target = boot/Image-<suffix>`.
- Headers PKGBUILD: `ln -sr "${_builddir}" "${pkgdir}/usr/src/${pkgbase}"`
needs a preceding `install -d "${pkgdir}/usr/src"`. Cargo-cult from
arch's `linux` package without checking that pacman pre-creates `/usr/src`
for kernels.
- HTTPS download from nc.reauktion.de can stall on slow wifi (fresnel @ 181 ms
ping). Same-LAN scp from hertz (which already has the published pkgs in
`/tmp/ka-publish/`) is the workaround. ka-install should detect and prefer
LAN-fanout.
- Manifest must carry the kernel suffix (`-fresnel-fourier`) explicitly so
alongside-install paths (`/boot/Image-<suffix>`, `/boot/dtbs-<suffix>/`,
`/boot/initramfs-<suffix>.img`) don't collide with the EOS-stock paths.
- Backup target needs `install -d -o $USER -g $USER` first time per host —
`/sparfuxdata/kernel-agent-backups/<host>/<version>/` is created lazily.
### Out of scope this round (explicit defer)
- **vb2 dma_resv RFC v2** + panfrost IOMMU_CACHE for RK3399 — would have closed
the fresnel-fourier campaign criterion-4 readback transitive-proof gap, but
v2 isn't implemented (RFC v1 rejected upstream). Deferred to a follow-up
build once v2 lands. See `marfrit/dmabuf-modifier-triage#3`.
- **Replace** `linux-eos-arm` rather than coexist alongside — preserves easy
rollback at u-boot. Can flip to `provides=(linux-eos-arm) conflicts=(...)`
later once burn-in proves the OC kernel reliable.
## Open follow-ups (post-rollout) ## Open follow-ups (post-rollout)
- Migrate `github.com/marfrit/misc_patches/genbook/kernel/` (9 patches against - Migrate `github.com/marfrit/misc_patches/genbook/kernel/` (9 patches against
linux-6.19.9) into proper Coulomb/RockHard campaign repo with scope tags linux-6.19.9) into proper Coulomb/RockHard campaign repo with scope tags
applied. Some patches will need splitting (e.g., 0010 suspend/resume is applied. Some patches will need splitting (e.g., 0010 suspend/resume is
multi-scope and should split into soc:rk3588 + board:coolpi-cm5-genbook multi-scope and should split into soc:rk3588 + board:coolpi-cm5-genbook
pieces). pieces). — Issue #1.
- Migrate `besser/patches/` (~30 BES2600 staging series) into the scope-tagged - Migrate `besser/patches/` (~30 BES2600 staging series) into the scope-tagged
tree at `driver/bes2600/` with promote eligibility per series. tree at `driver/bes2600/` with promote eligibility per series. — Issue #2.
- fresnel: replace the loose `~/rk3399-pinebook-pro.dts` workflow with either
a pacman hook (cheap, restores OC after each kernel update) or a proper
`linux-eos-arm-fresnel` PKGBUILD that owns the DTB conflict (real fix).
The April 2026 silent-revert is the canonical reason kernel-agent exists.
- Decide whether boltzmann (BredOS-stock today) becomes a Neutron-managed - Decide whether boltzmann (BredOS-stock today) becomes a Neutron-managed
custom kernel target or stays stock. Decision deferred per memory custom kernel target or stays stock. Decision deferred per memory
`project_neutron.md`. `project_neutron.md`. — Issue #4.
- ~~fresnel DTS persistence~~ — **closed** by the bootstrap reference build
above. Issue #3 closed.