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(
634
634
let ostree = sysroot. get_ostree ( ) ?;
635
635
let staged = ostree. staged_deployment ( ) . unwrap ( ) ;
636
636
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
+
637
647
Ok ( staged)
638
648
}
639
649
Original file line number Diff line number Diff line change @@ -95,7 +95,19 @@ impl From<ImageReference> for OstreeImageReference {
95
95
96
96
/// Check if a deployment has soft reboot capability
97
97
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
+ }
99
111
}
100
112
101
113
/// Parse an ostree origin file (a keyfile) and extract the targeted
Original file line number Diff line number Diff line change 1
1
//! Perform initial setup for a container image based system root
2
2
3
- #[ cfg( feature = "bootc" ) ]
4
3
use anyhow:: Result ;
5
4
use fn_error_context:: context;
6
5
use ostree:: glib;
You can’t perform that action at this time.
0 commit comments