-
Notifications
You must be signed in to change notification settings - Fork 0
Runtime Runner
The BackupCheckup Runtime Runner is an optional Home Assistant app for Home Assistant OS. It receives only a backup that has already passed structural verification and starts its Home Assistant configuration in Recovery Mode inside a temporary environment.
Structural verification proves that the archives and files are readable. The runner adds evidence that the included configuration can start with the installed Home Assistant runtime and reach an internal HTTP endpoint. It is not required for inventory, Health Score, or integrity monitoring.
- Install and configure the BackupCheckup integration first.
- Open Settings → Apps → App Store → Repositories.
- Add
https://github.com/jl0906/BackupCheckup. - Install and start BackupCheckup Runtime Runner.
- Wait for Home Assistant to pass the discovered runner to BackupCheckup.
- Run Check backup protection again.
The App Store reads runtime_runner from the repository's default branch, not from the HACS release archive. After a runner update, refresh the App Store and install the offered app update.
The app log must show the expected version, for example:
runner initialized version=3.0.12 isolation_available=True
- The integration structurally verifies the backup.
- The verified archive is transferred internally over certificate-pinned TLS.
- The runner checks size and SHA-256.
- Home Assistant configuration is extracted into a temporary private workspace.
- A separate network namespace with loopback only is created.
- Home Assistant starts in Recovery Mode as an unprivileged user without Linux capabilities or Supervisor credentials.
- An internal readiness probe waits for the temporary HTTP endpoint.
- The process stops and the upload, configuration, password, and logs are removed.
- Only bounded, signed evidence is returned to the integration.
- no Supervisor restore endpoint,
- no production-configuration mount,
- no host network or published host port,
- no Docker socket or Home Assistant API access,
- separate network namespace,
- unprivileged child, empty capabilities, and
no_new_privs, - minimal environment without inherited Supervisor tokens,
- hard process, file-descriptor, core-dump, file-size, and address-space limits,
- one runtime test at a time,
- authenticated discovery, bearer token, certificate pinning, and HMAC-signed terminal evidence.
The controller needs NET_ADMIN and SYS_ADMIN only to create and initialize the network namespace. These capabilities are not inherited by restored Home Assistant.
| Option | Default | Range | Purpose |
|---|---|---|---|
maximum_archive_gb |
50 | 1–2048 | Rejects larger uploads. |
maximum_expanded_gb |
250 | 1–8192 | Stops extraction beyond this limit. |
runtime_timeout_minutes |
20 | 2–60 | Stops an instance that does not become ready. |
The child additionally has an 8 GiB virtual-address-space limit and a 2 GiB file-size limit. These retain hard boundaries without unnecessarily rejecting large but valid Home Assistant backups during startup.
- Runner not available: no connected compatible app
- Not run: no runtime test for the current backup
- Running: upload, extraction, boot, or probing is active
- Runtime start verified: Recovery Mode, isolation, and readiness were confirmed
- Failed: Home Assistant exited or never became ready
- Stopped by a safety limit: timeout or controlled resource boundary
- Inconclusive: internal or incomplete result
Stable error codes distinguish memory limit, file limit, permission failure, missing runtime, CLI incompatibility, startup timeout, generic exit, and sandbox preflight failure.
The integration and runner use separate update paths. A HACS update does not replace the app. Verify the runner version in its log after every runner update.
For 3.0.12, refresh the App Store and rebuild or reinstall the runner from the current default branch. Updating only the HACS integration leaves an older runner image installed.