live-image: install stage tools and fail loudly if any are missing
CI / Lint + build + test (push) Successful in 1m32s
Release / release (push) Successful in 6m28s

The live image was still carrying the Phase 2 package list, so SMART,
CPUStress, and Network each hit a LookPath miss and returned
pass-with-skip. A run that skipped every real check still ended in
"completed" — nothing on the report said the image was broken.

Add smartmontools, stress-ng, fio, iperf3, lshw, lm-sensors,
e2fsprogs, and util-linux to mkosi.conf. Flip the three stages from
skip-pass to fail when their binary is missing so any future
packaging regression blocks the run instead of whispering past it.
Legitimate "no hardware" skips (no GPU, no hwmon, no disks,
non-destructive) are untouched.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-18 16:39:28 -04:00
parent 0db790ae3e
commit e73e31af92
4 changed files with 40 additions and 10 deletions
+6 -4
View File
@@ -24,11 +24,13 @@ type NetworkConfig struct {
// isn't reachable, or throughput is zero.
func Network(ctx context.Context, d Deps, cfg NetworkConfig) Outcome {
if _, err := exec.LookPath("iperf3"); err != nil {
d.Warn("Network: iperf3 not found — skipping stage")
// Live image ships iperf3; absence means packaging regression.
d.Error("Network: iperf3 not found — live image is missing required tool")
return Outcome{
Passed: true,
Summary: "skipped (iperf3 missing)",
Extras: map[string]any{"skipped": true, "reason": "iperf3_missing"},
Passed: false,
Message: "iperf3 binary missing from live image",
Summary: "failed (iperf3 missing)",
Extras: map[string]any{"reason": "iperf3_missing"},
}
}
host, err := deriveHost(cfg.OrchestratorURL)