Skip to content

Commit 83e4ee9

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 ffd0f6c commit 83e4ee9

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

crates/lib/src/deploy.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,16 @@ 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+
let marker_path = deployment_dir.join(".bootc-factory-reset");
644+
std::fs::write(&marker_path, b"")?;
645+
}
646+
637647
Ok(staged)
638648
}
639649

crates/lib/src/status.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,19 @@ 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 = deployment_dir.join(".bootc-factory-reset").exists();
101+
102+
if is_factory_reset {
103+
// Factory reset deployments don't support soft reboots
104+
// this is primarily because the kargs validation will fail when checking for soft reboot
105+
// compatibility in the ostree code, which will cause bootc status and upgrade to fail.
106+
// (see ostree_sysroot_deployment_can_soft_reboot in ostree)
107+
false
108+
} else {
109+
ostree_ext::systemd_has_soft_reboot() && sysroot.deployment_can_soft_reboot(deployment)
110+
}
99111
}
100112

101113
/// 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)