Skip to content

Prototype a Gokrazy skywire-visor appliance image (self-updating over dmsg) #3537

Description

@0pcom

Motivation

A Gokrazy appliance packs Go programs into an immutable image that boots straight into them — no distro userland. skywire is Go, so a dedicated skywire-visor appliance is feasible, and its killer feature is built-in A/B atomic auto-update.

That directly targets the recurring fleet-drift problem (stale versions → dropped rewards + dmsg-disc CPU load), which today fails in many ways on real boards: opt-in apt/unattended-upgrades, Armbian masking the apt-daily timers, tiny zram /var/log filling up, half-upgraded Python breaking unattended-upgrade, missing apt sources. An immutable self-updating image sidesteps all of that.

Scope — visor-core only

Fits (pure Go): dmsg, routing, hypervisor, dmsgpty, internal-mode apps (skysocks, skychat).

Does not fit (external binaries — Gokrazy has no userland/shell):

Also note: the /etc/skywire.conf + autoconfig + systemd config/lifecycle model does not apply on gokrazy (no systemd; config = program flags + gokrazy's own mechanism). This tier coexists with the deb/AUR normal-distro install — it does not replace it.

KEY REQUIREMENT — update over dmsg, not clearnet HTTP

Gokrazy's updater fetches images from an HTTP update source. We should make the appliance self-update over skywire/dmsg instead of regular HTTP, if at all possible:

  • Point the gokrazy update source at a dmsg endpoint (an update-visor serving the image over dmsg-http), reusing skywire's FetchOverDmsg / dmsghttp — so the appliance updates over its own mesh: no clearnet dependency, censorship-resistant, works wherever dmsg reaches.
  • Likely shape: a small local dmsg→HTTP shim the gokrazy updater points at (http://localhost:<port> → dmsg fetch), or a custom updater that speaks dmsg directly. Investigate whether gokrazy's update client is pluggable enough, or whether we wrap/replace it.
  • Fallback to HTTP only if a pure-dmsg path proves impractical.

Deliverable

A prototype gokr-packer build of a skywire visor image (visor-core), booting + registering, with the auto-update path demonstrated over dmsg. Measure image size, boot, and the update round-trip.

Relates to: the fleet-not-updating investigation, #3536 (pure-Go DHCP/DNS enabling a gokrazy vpn-router), the 0magnet/router7 host-OS port.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions