@@ -31,6 +31,7 @@ use ostree_ext::{gio, ostree};
3131use rustix:: fs:: Mode ;
3232
3333use crate :: bootc_composefs:: status:: { composefs_booted, ComposefsCmdline } ;
34+ use crate :: cli:: prepare_for_write;
3435use crate :: lsm;
3536use crate :: podstorage:: CStorage ;
3637use crate :: spec:: ImageStatus ;
@@ -111,11 +112,12 @@ impl BootedStorage {
111112 pub ( crate ) async fn new ( ) -> Result < Self > {
112113 let physical_root = Dir :: open_ambient_dir ( "/sysroot" , cap_std:: ambient_authority ( ) )
113114 . context ( "Opening /sysroot" ) ?;
115+
114116 let run =
115117 Dir :: open_ambient_dir ( "/run" , cap_std:: ambient_authority ( ) ) . context ( "Opening /run" ) ?;
118+
116119 if let Some ( cmdline) = composefs_booted ( ) ? {
117- let mut composefs =
118- ComposefsRepository :: open_path ( physical_root. open_dir ( COMPOSEFS ) ?, "." ) ?;
120+ let mut composefs = ComposefsRepository :: open_path ( & physical_root, COMPOSEFS ) ?;
119121 if cmdline. insecure {
120122 composefs. set_insecure ( true ) ;
121123 }
@@ -128,24 +130,26 @@ impl BootedStorage {
128130 composefs : OnceCell :: from ( composefs) ,
129131 imgstore : Default :: default ( ) ,
130132 } ;
131- Ok ( Self { storage } )
132- } else {
133- let sysroot = ostree:: Sysroot :: new_default ( ) ;
134- sysroot. set_mount_namespace_in_use ( ) ;
135- let sysroot = ostree_ext:: sysroot:: SysrootLock :: new_from_sysroot ( & sysroot) . await ?;
136- sysroot. load ( gio:: Cancellable :: NONE ) ?;
137- // Verify this is a booted system
138- let _ = sysroot. require_booted_deployment ( ) ?;
139133
140- let storage = Storage {
141- physical_root,
142- run,
143- ostree : OnceCell :: from ( sysroot) ,
144- composefs : Default :: default ( ) ,
145- imgstore : Default :: default ( ) ,
146- } ;
147- Ok ( Self { storage } )
134+ return Ok ( Self { storage } ) ;
148135 }
136+
137+ prepare_for_write ( ) ?;
138+
139+ let sysroot = ostree:: Sysroot :: new_default ( ) ;
140+ sysroot. set_mount_namespace_in_use ( ) ;
141+ let sysroot = ostree_ext:: sysroot:: SysrootLock :: new_from_sysroot ( & sysroot) . await ?;
142+ sysroot. load ( gio:: Cancellable :: NONE ) ?;
143+
144+ let storage = Storage {
145+ physical_root,
146+ run,
147+ ostree : OnceCell :: from ( sysroot) ,
148+ composefs : Default :: default ( ) ,
149+ imgstore : Default :: default ( ) ,
150+ } ;
151+
152+ Ok ( Self { storage } )
149153 }
150154
151155 /// Determine the boot storage backend kind.
0 commit comments