File tree Expand file tree Collapse file tree 3 files changed +23
-2
lines changed Expand file tree Collapse file tree 3 files changed +23
-2
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -95,7 +95,19 @@ impl From<ImageReference> for OstreeImageReference {
9595
9696/// Check if a deployment has soft reboot capability
9797fn 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
Original file line number Diff line number Diff line change 11//! Perform initial setup for a container image based system root
22
3- #[ cfg( feature = "bootc" ) ]
43use anyhow:: Result ;
54use fn_error_context:: context;
65use ostree:: glib;
You can’t perform that action at this time.
0 commit comments