Skip to main content

max / alloy

image: ship the tools that make ECC and SMART readable The image had no way to read ECC corrected-error counts, no SMART for anything that is not NVMe, and no path to a BMC. That is ECC memory you cannot act on, and rising correctables are the early warning it is bought for. nvme-cli was already in the base, so NVMe wear was the one thing already visible. rasdaemon, smartmontools, ipmitool and lm_sensors: 49 MiB installed, most of it smartmontools dragging perl for a mail path nothing here uses. edac-utils is deliberately absent, being an empty stub in Fedora 43 that rasdaemon's ras-mc-ctl replaced. The preset line is the half that matters. smartd and lm_sensors enable their own units from %post, but rasdaemon ships its unit disabled, so the packages alone would leave ras-mc-ctl reading zero errors because nothing was counting. Wanted first by the bench build host, whose characterization baseline requires ECC counters provably readable before it is trusted as a reference, but a laptop with no ECC still wants SMART on the disk it boots from, so this goes in the base rather than a server variant.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-25 17:29 UTC
Signed with PGP, not checked
Commit: 36e9516705bd351ad6301e1ec8d4c7ebbb5b654c
Parent: 2fe7e4c
2 files changed, +40 insertions, -0 deletions
@@ -237,6 +237,34 @@
237 237 # System introspection
238 238 bottom \
239 239 dua-cli \
240 + # Hardware health. The base ships nvme-cli, so NVMe wear and SMART
241 + # were already readable, and nothing else was: no way to read ECC
242 + # corrected-error counts, no SMART for SATA, no path to a BMC. That
243 + # is ECC memory you cannot act on, and rising correctables are the
244 + # early warning ECC is bought for. It matters first for the bench
245 + # build host, whose characterization baseline requires ECC counters
246 + # provably readable before it is trusted as a reference (GoingsOn
247 + # tailoredmachines 18af3fb3), but a laptop with no ECC at all still
248 + # wants SMART on the disk it boots from, so these live in the base
249 + # rather than waiting on a server variant.
250 + #
251 + # rasdaemon carries ras-mc-ctl, which is the ECC readback. Note
252 + # edac-utils is NOT here: in Fedora 43 it is an empty stub package
253 + # (installsize 0) and rasdaemon replaced it.
254 + #
255 + # smartmontools is the largest of the four by dependency closure,
256 + # dragging perl for the mail path it will never use here. Taken
257 + # anyway: smartctl is the only SATA/USB SMART reader, and the four
258 + # together add 49 MiB installed.
259 + rasdaemon \
260 + smartmontools \
261 + # ipmitool talks to the AST2600 BMC on server boards from the host
262 + # side, which is how a headless box reports its own sensors and
263 + # event log without going through the web UI.
264 + ipmitool \
265 + # lm_sensors covers everything that is not behind a BMC: laptop
266 + # thermals, and on a desktop board the CPU and fan readings.
267 + lm_sensors \
240 268 # Wayland session glue
241 269 cliphist \
242 270 # The fuzzy picker behind both TUI menus in usr/bin: alloy-menu
@@ -45,4 +45,16 @@
45 45 # injecting it.
46 46 enable swayosd-libinput-backend.service
47 47
48 + # rasdaemon ships its unit disabled, so installing the package is not enough:
49 + # without this line nothing collects machine-check and EDAC events, and
50 + # `ras-mc-ctl --error-count` reads zero because zero is what was counted, not
51 + # what happened. That is the failure mode ECC memory is bought to avoid, and
52 + # it is silent. Its two siblings need no line here: smartmontools and
53 + # lm_sensors both enable their own units from %post scriptlets.
54 + #
55 + # Cost is a daemon on every install, including laptops with no ECC. It is
56 + # small, it reads rather than writes, and on a machine with no EDAC driver it
57 + # simply collects nothing.
58 + enable rasdaemon.service
59 +
48 60 disable tailscaled.service