@@ -19,7 +19,6 @@ use crate::freezethaw::fsfreeze_thaw_cycle;
1919) ) ]
2020use crate :: grubconfigs:: { ensure_grub_permissions, GRUB2DIR } ;
2121use crate :: model:: { ComponentStatus , ComponentUpdatable , ContentMetadata , SavedState , Status } ;
22- use crate :: util:: running_in_container;
2322use crate :: { ostreeutil, util} ;
2423use anyhow:: { anyhow, Context , Result } ;
2524use camino:: { Utf8Path , Utf8PathBuf } ;
@@ -54,6 +53,7 @@ impl ConfigMode {
5453 }
5554}
5655
56+ #[ allow( clippy:: too_many_arguments) ]
5757pub ( crate ) fn install (
5858 source_root : & str ,
5959 dest_root : & str ,
@@ -105,18 +105,21 @@ pub(crate) fn install(
105105 continue ;
106106 }
107107
108- // skip components that don't have an update metadata
109- if component. query_update ( & source_root_dir) ?. is_none ( ) {
108+ if !component. is_bootloader_supported ( bootloader) {
110109 println ! (
111- "Skip installing component {} without update metadata " ,
110+ "Skip installing component {} as it does not support bootloader {bootloader} " ,
112111 component. name( )
113112 ) ;
114113 continue ;
115114 }
116115
117- if !component. is_bootloader_supported ( bootloader) {
116+ // skip components that don't have an update metadata
117+ if component
118+ . query_update ( & source_root_dir, bootloader) ?
119+ . is_none ( )
120+ {
118121 println ! (
119- "Skip installing component {} as it does not support bootloader {bootloader} " ,
122+ "Skip installing component {} without update metadata " ,
120123 component. name( )
121124 ) ;
122125 continue ;
@@ -283,22 +286,15 @@ pub(crate) fn get_components() -> Components {
283286 get_components_impl ( false )
284287}
285288
286- pub ( crate ) fn generate_update_metadata ( sysroot_path : & str , bootloader : Bootloader ) -> Result < ( ) > {
289+ pub ( crate ) fn generate_update_metadata ( sysroot_path : & str ) -> Result < ( ) > {
287290 // create bootupd update dir which will save component metadata files for both components
288291 let updates_dir = Path :: new ( sysroot_path) . join ( crate :: model:: BOOTUPD_UPDATES_DIR ) ;
292+
289293 std:: fs:: create_dir_all ( & updates_dir)
290294 . with_context ( || format ! ( "Failed to create updates dir {:?}" , & updates_dir) ) ?;
291- for component in get_components ( ) . values ( ) {
292- if !component. is_bootloader_supported ( bootloader) {
293- println ! (
294- "Bootloader {bootloader} not supported for {}. Skipping metadata generation" ,
295- component. name( ) ,
296- ) ;
297-
298- continue ;
299- }
300295
301- if let Some ( v) = component. generate_update_metadata ( sysroot_path, bootloader) ? {
296+ for component in get_components ( ) . values ( ) {
297+ if let Some ( v) = component. generate_update_metadata ( sysroot_path) ? {
302298 println ! (
303299 "Generated update layout for {}: {}" ,
304300 component. name( ) ,
@@ -343,7 +339,7 @@ pub(crate) fn update(name: &str, rootcxt: &RootContext) -> Result<ComponentUpdat
343339 anyhow:: bail!( "Component {} is not installed" , name) ;
344340 } ;
345341 let sysroot = & rootcxt. sysroot ;
346- let update = component. query_update ( sysroot) ?;
342+ let update = component. query_update ( sysroot, bootloader ) ?;
347343 let update = match update. as_ref ( ) {
348344 Some ( p) => match inst. meta . can_upgrade_to ( p) {
349345 std:: cmp:: Ordering :: Less => p, // current < available -> upgrade
@@ -364,10 +360,12 @@ pub(crate) fn update(name: &str, rootcxt: &RootContext) -> Result<ComponentUpdat
364360 target_arch = "riscv64"
365361 ) ) ]
366362 {
367- let grub2dir = & sysroot
368- . open_dir ( format ! ( "boot/{GRUB2DIR}" ) )
369- . context ( "Opening /boot/grub2" ) ?;
370- ensure_grub_permissions ( grub2dir) ?;
363+ if bootloader == Bootloader :: Grub {
364+ let grub2dir = & sysroot
365+ . open_dir ( format ! ( "boot/{GRUB2DIR}" ) )
366+ . context ( "Opening /boot/grub2" ) ?;
367+ ensure_grub_permissions ( grub2dir) ?;
368+ }
371369 }
372370
373371 let mut pending_container = state. pending . take ( ) . unwrap_or_default ( ) ;
@@ -417,13 +415,15 @@ pub(crate) fn adopt_and_update(
417415 target_arch = "riscv64"
418416 ) ) ]
419417 {
420- let grub2dir = & sysroot
421- . open_dir ( format ! ( "boot/{GRUB2DIR}" ) )
422- . context ( "Opening /boot/grub2" ) ?;
423- ensure_grub_permissions ( grub2dir) ?;
418+ if bootloader == Bootloader :: Grub {
419+ let grub2dir = & sysroot
420+ . open_dir ( format ! ( "boot/{GRUB2DIR}" ) )
421+ . context ( "Opening /boot/grub2" ) ?;
422+ ensure_grub_permissions ( grub2dir) ?;
423+ }
424424 }
425425
426- let Some ( update) = component. query_update ( sysroot) ? else {
426+ let Some ( update) = component. query_update ( sysroot, bootloader ) ? else {
427427 anyhow:: bail!( "Component {} has no available update" , name) ;
428428 } ;
429429
@@ -486,7 +486,7 @@ pub(crate) fn validate(name: &str) -> Result<ValidationResult> {
486486pub ( crate ) fn status ( ) -> Result < Status > {
487487 let mut ret: Status = Default :: default ( ) ;
488488 let mut known_components = get_components ( ) ;
489- let sysroot = Dir :: open_ambient_dir ( "/" , ambient_authority ( ) ) ?;
489+ let root = Dir :: open_ambient_dir ( "/" , ambient_authority ( ) ) ?;
490490
491491 let bootloader = get_bootloader ( ) ?;
492492 let state = SavedState :: load_from_disk ( "/" , Some ( bootloader) ) ?;
@@ -499,7 +499,7 @@ pub(crate) fn status() -> Result<Status> {
499499 . ok_or_else ( || anyhow ! ( "Unknown component installed: {}" , name) ) ?;
500500 let component = component. as_ref ( ) ;
501501 let interrupted = state. pending . as_ref ( ) . and_then ( |p| p. get ( name. as_str ( ) ) ) ;
502- let update = component. query_update ( & sysroot ) ?;
502+ let update = component. query_update ( & root , bootloader ) ?;
503503 let updatable = ComponentUpdatable :: from_metadata ( & ic. meta , update. as_ref ( ) ) ;
504504 let adopted_from = ic. adopted_from . clone ( ) ;
505505 ret. components . insert (
@@ -538,7 +538,7 @@ pub(crate) fn status() -> Result<Status> {
538538 if let Some ( adopt_ver) = component:: query_adopt_state ( ) ? {
539539 let component = component:: new_from_name ( & name) ?;
540540 // Skip if the update metadata could not be found
541- if component. query_update ( & sysroot ) ?. is_none ( ) {
541+ if component. query_update ( & root , bootloader ) ?. is_none ( ) {
542542 continue ;
543543 } ;
544544 ret. adoptable . insert ( name. to_string ( ) , adopt_ver) ;
0 commit comments