OpenRiot v8.0.2: Ask the Disk First

“The machine had learned to check the door, but it still walked the whole hallway every morning, opening every lock, reading every label, and announcing each room before it knew whether anything had changed. The rooms were the same. The labels were the same. Only the walking was new. So we taught it to ask one question first: is the disk already what we think it is? When the answer was yes, it stopped walking.” – The OpenRiot Crew, v8.0.2


Release Overview

OpenRiot 8.0.2 is a maintenance release for the setup path. It does not change the desktop. It changes how much work setup does before it knows whether work is needed.

The package update was the biggest offender. Every setup.sh run executed pkg_add -Iu, which scans the full package index and can take up to an hour even when every pinned package is already installed. The installer now asks whether the installed packages match the pins first. If they do, the update is skipped. If they do not, the full update runs once.

The release also finishes the setup output cleanup: package messages now use the same [INFO] and [WARN] prefixes as the rest of the installer, and the documentation no longer tells users to run pkg_add -u when setup already does it.

Total changes: one fast package check, one conditional update, and documentation that stops repeating the work.


Ask the Disk First

The old flow was unconditional:

pkg_add -Iu

That command is correct after a base upgrade. It is wasteful on the next run. Version matching scans the package index, resolves dependencies, and reports every package before deciding most of them are already current.

The new command is silent and local:

openriot --packages-current

It compares install/packages.yaml against pkg_info and exits:

  • 0 when every pin is installed at the exact version
  • 1 when any pin is missing or different

Setup now runs the full update only when the check fails:

if ! run_openriot --packages-current "$LOG_FILE"; then
    run_openriot --pkg-update "$LOG_FILE"
fi

The first 8.0 setup still runs the full update. The next setup on the same release skips it. An 8.1 release changes the pins, so the check fails once and the update runs again.

Somewhere a vendor is reinstalling the same packages every launch and calling it a feature. We ask the disk first.


The Package Line Learns Its Prefix

The update message was the only line in setup without a prefix:

Updating packages from OpenBSD 8.0 stable...

It now matches the rest of the output:

[INFO] Updating packages from OpenBSD 8.0 stable...
[WARN] This can take up to an hour.

The warning is honest about the worst case. The shorter message fits a normal terminal without wrapping.


The Manual Tells the Truth

The upgrade guide had three corrections:

  • Backup is optional. The heading now says so, and the text says skipping it removes the only rollback path.
  • The 1.1G figure stays. That is OpenBSD’s official /usr requirement. The sets are smaller, but the guide’s margin is the number to use.
  • pkg_add -u is not a user step. Setup runs pkg_add -Iu before installing pins. The manual now says so instead of asking the user to repeat it.

sysmerge remains recommended. fw_update remains optional. pkg_add -u remains the fallback when setup cannot complete.


🧾 Files Changed

File Change
setup.sh Conditional package update
source/installer/cmd.go NEW PackagesCurrent check
source/commands/commands.go NEW --packages-current command
  [INFO] package update line
  Shorter one-hour warning
install/openriot Rebuilt with the new check
README.md Backup optional, setup handles packages
docs/Migration-8.0.md Backup optional, package steps corrected

🗣️ Final Words

“The disk had not changed, but the machine kept asking anyway, because asking was the only motion it knew. So we gave it a question it could answer in one breath: are the pins already here? When the answer was yes, the hallway stayed dark and the morning stayed short. The people who sell busywork will call that skipping. We call it knowing when the work is already done.” – The OpenRiot Crew, v8.0.2