Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/Skidbladnir

.nornir/move-guide.md

move — guide

Class: guide · audience: an operator receiving a bundle on the secure side. The what is in move-design.md.

The receive gate (do this before touching anything)

use skidbladnir::{archive::TarZstd, fetch};

let eng = TarZstd::new();
// simplest: verify (manifest root + every entry) and get a handle, or bail:
let bundle = fetch::fetch_and_verify(&bundle_path, &eng)?;   // fetch.rs:74

To also check an out-of-band whole-file SHA (handed to you separately from the bundle — e.g. read aloud, or on a second medium):

let report = fetch::verify_on_receipt(&bundle_path, &eng, Some(expected_sha))?;
assert!(report.is_ok(), "receipt failed: {report:?}");
// report.bundle_hash_ok / manifest_root_ok / bad_entries pinpoint what went wrong

If verification fails, stop — do not unpack. A non-empty bad_entries, a false manifest_root_ok, or a false bundle_hash_ok each means the bundle is not what was packed.

Detect the OS and prepare it

use skidbladnir::platform::{Platform, specialize, unpack};

let p = Platform::detect();                 // reads /etc/os-release
let actions = specialize(p, /* disable_selinux */ true)?;   // e.g. ["selinux:permissive"] on RHEL

specialize only touches SELinux on RHEL-family targets; on Debian/Ubuntu it is a no-op. The toggle is best-effort and non-fatal.

Unpack into the software dir

unpack(&eng, &bundle_path, &software_dir)?;   // thin wrapper over Archive::extract_all

For a real product install (dirs, service, identity, ordered start) use the install lifecycle instead of raw unpack — see install-guide.md.

Gotchas