Add OEM install mode and factory snapshots
OEM mode installs the entire system but defers user creation to first boot, where the runtime's omarchy-oem-setup asks for the owner and lands them in the already-installed system — and the same machinery arms omarchy-reset-computer. The configurator's install-mode step gains an OEM choice, which required moving the user step after mode selection (OEM skips it entirely). Autoinstall rigs select OEM with an `oem` marker file on the cidata drive, which also replaces the user_credentials.json requirement. In the orchestrator, OEM swaps the user phases for a stage_oem_state phase: it stashes the bundled Node tarball (every install, for offline factory resets), arms omarchy-oem-setup.service in the target, and on encrypted installs stages the throwaway LUKS passphrase — generated by InstallContext when the input carries none — with a keyfile embedded in the UKI so boot auto-unlocks until first-boot setup re-keys to the owner's password. The install fails with a clear error if the bundled runtime lacks OEM support. Every install now also ends with a read-only @factory snapshot of @ at the btrfs top level — outside snapper's reach — which is what makes omarchy-reset-computer a true factory reset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6004e80485
commit
679edce2e3
12 files changed
+927
-108
No files matched your search
@@ -124,6 +124,35 @@ run_load || fail "required pair plus authorized_keys loads"
|
||||
[[ ! -e $sandbox/root/tailscale_authkey ]] || fail "absent tailscale_authkey is not copied"
|
||||
pass "present optional files are copied, absent ones skipped"
|
||||
|
||||
# An oem marker replaces user_credentials.json: OEM installs defer user
|
||||
# creation to first boot, so imaging rigs ship no credentials at all.
|
||||
new_sandbox
|
||||
attach_drive cidata
|
||||
echo '{"disk_config": {}}' >"$sandbox/media/user_configuration.json"
|
||||
: >"$sandbox/media/oem"
|
||||
run_load || fail "config plus oem marker loads"
|
||||
[[ -f $sandbox/root/oem ]] || fail "oem marker is copied"
|
||||
[[ ! -e $sandbox/root/user_credentials.json ]] || fail "oem drive copies no credentials"
|
||||
pass "oem marker stands in for credentials"
|
||||
|
||||
# The oem marker and credentials can coexist (rig supplies its own LUKS
|
||||
# passphrase in the credentials file); both are copied.
|
||||
new_sandbox
|
||||
attach_drive cidata
|
||||
write_required_pair
|
||||
: >"$sandbox/media/oem"
|
||||
run_load || fail "oem marker plus credentials loads"
|
||||
[[ -f $sandbox/root/oem && -f $sandbox/root/user_credentials.json ]] || fail "both oem marker and credentials are copied"
|
||||
pass "oem marker plus credentials copies both"
|
||||
|
||||
# An oem marker without the configuration is still not an autoinstall drive.
|
||||
new_sandbox
|
||||
attach_drive cidata
|
||||
: >"$sandbox/media/oem"
|
||||
! run_load || fail "oem marker alone is not an autoinstall drive"
|
||||
[[ ! -e $sandbox/root/oem ]] || fail "oem marker alone copies nothing"
|
||||
pass "oem marker alone falls back to the wizard"
|
||||
|
||||
# Half the required pair is not an autoinstall drive: unmount and fall back.
|
||||
new_sandbox
|
||||
attach_drive cidata
|
||||
|
||||
Reference in new issue
Block a user