SmechVisor spk-visor

spk-visor is now retired and fully merged into the unified spk v2.0 binary. All SmechVisor management operations — OTA updates, network deploy, and the deploy shim receiver — are now part of spk. The old spk-visor commands still work as aliases during the transition period, but all new scripts should use spk directly.

spk-visor is retired as of SPK v2.0 The spk-visor binary is no longer maintained separately. Use spk for everything. The command mapping is shown below.

Command migration table

Old (spk-visor)New (spk v2)
spk-visor entire-system-upgradespk system-upgrade
spk-visor deploy-system-img-copy <code>spk deploy-system-img-copy <code>
spk-visor receive-deployspk receive-deploy
spk-visor system-install <pkg>spk install <pkg>
spk-visor helpspk help
spk-visor aboutspk about
spk-visor versionspk version

Commands (unified spk)

spk system-upgrade
OTA update — downloads the latest smechvisor-daemon and smechvisor-base packages from GitHub Releases. On SmechVisor, the daemon binary is swapped live (no reboot required for daemon updates); base system changes flag for reboot.
spk system-upgrade
spk deploy-system-img-copy <code>
Network deploy — the donor side. Streams all SmechVisor packages over TCP to the machine running the Deploy Shim ISO that advertised the given code.
spk deploy-system-img-copy e13gts2
spk receive-deploy
The receiver side (used internally by the Deploy Shim). Generates a 7-character hex code, displays it on screen, broadcasts it over UDP every 2 seconds, waits for a donor to connect, receives packages over TCP, extracts them to /mnt/target, and reboots.
spk install <pkg>
Fully supported on SmechVisor. Fetches and extracts any package from the Smech Labs repository into /. Use this to add packages to a running SmechVisor node without a full system upgrade.
spk install smechvisor-daemon
spk install firmware
spk help / spk about / spk version
Same as before — print help, workstation specs, or version string.

OTA Updates

SmechVisor is designed for zero-downtime server operation. spk-visor entire-system-upgrade handles two classes of update differently:

PackageUpdate methodReboot needed?
smechvisor-daemon Stop smechvisord → swap binary → restart immediately No — live swap, <3 seconds downtime
smechvisor-base Write to disk, stage for next boot Yes — scheduled, at operator's discretion

How it works

  1. spk system-upgrade fetches smechvisor-daemon.tar.xz and smechvisor-base.tar.xz from the GitHub Release URL using curl.
  2. Packages are extracted to a staging directory.
  3. The daemon package: rc-service smechvisord stop → copy binary → rc-service smechvisord start.
  4. The base package: extracted to / directly. Running system processes are unaffected. A reboot activates the new kernel or base libraries.
  5. If the daemon fails to restart, the old binary is restored from a backup taken in step 2.
Note Running VMs are never affected by a daemon OTA update — cloud-hypervisor processes run independently and continue operating while smechvisord restarts. The dashboard goes dark for under 3 seconds.

Network Deploy

Network deploy lets you provision a new bare-metal machine with SmechVisor without a USB drive, using an existing running SmechVisor node as the donor.

Prerequisites

Workflow

  1. Boot the target machine from the Deploy Shim ISO. Walk through: disk selection → auto-partition → network setup.
  2. The shim displays a 7-character code — for example e13gts2. It also broadcasts this code on UDP port 9191 on the LAN.
  3. On the donor node, run:
    spk deploy-system-img-copy e13gts2
  4. spk listens on UDP port 9191 for the broadcast containing SMECHVISOR_SHIM:e13gts2, gets the sender's IP, connects back on TCP port 9192, and streams all packages.
  5. The shim receives the packages, extracts them to the partitioned disk, installs GRUB, and reboots into SmechVisor.

Wire protocol

UDP discovery (port 9191):

SMECHVISOR_SHIM:{code}
# example: SMECHVISOR_SHIM:e13gts2

TCP package stream (port 9192):

[4 bytes big-endian: name length]
[name bytes: package name]
[8 bytes big-endian: data length]
[data bytes: raw .tar.xz contents]
... (repeat for each package)
[4 bytes: 0x00000000] -- stream terminator

Deploy Shim ISO

The Deploy Shim is a minimal bootable ISO that transforms any bare-metal machine into a SmechVisor receiver. It boots into a Rust + Newt TUI wizard with no desktop environment, no live OS — just the installer flow.

Shim TUI flow

  1. Disk selection — lists all detected block devices. Select the target disk.
  2. Auto-partition — the shim creates a GPT partition table with three partitions automatically:
    PartitionSizeTypeMount
    Part 1512 MBEFI System/boot/efi
    Part 22 GBLinux swapswap
    Part 3RemainingLinux filesystem/
  3. Network type — choose Ethernet or Wi-Fi.
    • Ethernet: choose DHCP (auto) or static IP.
    • Wi-Fi: select SSID from scan, enter password.
  4. Code display — a screen shows the 7-character deploy code. On another machine, run spk deploy-system-img-copy <code>.
  5. Receive & install — packages stream in over TCP, progress is displayed. GRUB is installed to the EFI partition. System reboots into SmechVisor.
Code generation The deploy code is generated from the current monotonic time and process PID, encoded as 7 hex characters. It is unique per shim boot session. The shim broadcasts it continuously every 2 seconds until a donor connects.

Shim ISO details

PropertyValue
Volume labelSMECHVISOR_SHIM
BootBIOS (GRUB i386-pc) + EFI (GRUB x86_64-efi)
InitMinimal shell wrapper — mounts /proc /sys /dev, runs dhcpcd, launches spk receive-deploy
Networkdhcpcd on all detected interfaces
DNS1.1.1.1 (Cloudflare) written to /etc/resolv.conf
Binarysmechvisor-shim Rust binary (Newt TUI) + spk v2.0

Download

The Deploy Shim ISO is distributed alongside the Install ISO on the SmechVisor downloads page.

FileSizeSHA-256
smechvisor-deploy-shim-20260702.iso 20 MB 1d0ac83deafae5f7e331e1b9815ce18b9810bfcd6bb30cfa4b381682e8b8cca7
sha256sum smechvisor-deploy-shim-20260702.iso
# expected: 1d0ac83deafae5f7e331e1b9815ce18b9810bfcd6bb30cfa4b381682e8b8cca7