Skip to content

Commit eeecd62

Browse files
committed
reset: Mark reset deployment dir with .bootc-factory-reset
This is currently used to signal to `bootc status` that the deployment is a factory reset and doesn't support soft reboot. Otherwise, the soft reboot code will throw an exception due to mismatched kargs. Signed-off-by: ckyrouac <[email protected]>
1 parent 37a5621 commit eeecd62

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

crates/lib/src/deploy.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,18 @@ async fn deploy(
634634
let ostree = sysroot.get_ostree()?;
635635
let staged = ostree.staged_deployment().unwrap();
636636
assert_eq!(staged.index(), r);
637+
638+
// This file is used to signal to other CLI commands that this deployment is a factory reset
639+
// (e.g. bootc status)
640+
if matches!(from, MergeState::Reset { .. }) {
641+
let deployment_dir = ostree.deployment_dirpath(&staged);
642+
let deployment_dir = std::path::Path::new(deployment_dir.as_str());
643+
if deployment_dir.exists() {
644+
let marker_path = deployment_dir.join(".bootc-factory-reset");
645+
std::fs::write(&marker_path, b"")?;
646+
}
647+
}
648+
637649
Ok(staged)
638650
}
639651

crates/lib/src/status.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,20 @@ impl From<ImageReference> for OstreeImageReference {
9595

9696
/// Check if a deployment has soft reboot capability
9797
fn has_soft_reboot_capability(sysroot: &SysrootLock, deployment: &ostree::Deployment) -> bool {
98-
ostree_ext::systemd_has_soft_reboot() && sysroot.deployment_can_soft_reboot(deployment)
98+
let deployment_dir = sysroot.deployment_dirpath(deployment);
99+
let deployment_dir = std::path::Path::new(deployment_dir.as_str());
100+
let is_factory_reset =
101+
deployment_dir.exists() && deployment_dir.join(".bootc-factory-reset").exists();
102+
103+
if is_factory_reset {
104+
// Factory reset deployments don't support soft reboots
105+
// this is primarily because the kargs validation will fail when checking for soft reboot
106+
// compatibility in the ostree code, which will cause bootc status and upgrade to fail.
107+
// (see ostree_sysroot_deployment_can_soft_reboot in ostree)
108+
false
109+
} else {
110+
ostree_ext::systemd_has_soft_reboot() && sysroot.deployment_can_soft_reboot(deployment)
111+
}
99112
}
100113

101114
/// Parse an ostree origin file (a keyfile) and extract the targeted

crates/ostree-ext/src/container/deploy.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
//! Perform initial setup for a container image based system root
22
3-
#[cfg(feature = "bootc")]
43
use anyhow::Result;
54
use fn_error_context::context;
65
use ostree::glib;

0 commit comments

Comments
 (0)