@@ -162,12 +162,22 @@ impl Efi {
162162 return Ok ( ( ) ) ;
163163 }
164164
165+ // Check shim exists and return earlier if not
166+ let shim_path = format ! ( "EFI/{vendordir}/{SHIM}" ) ;
167+ if !espdir. exists ( & shim_path) ? {
168+ anyhow:: bail!( "Failed to find {shim_path}" ) ;
169+ }
170+ let loader = format ! ( "\\ EFI\\ {vendordir}\\ {SHIM}" ) ;
171+
165172 let product_name = get_product_name ( & sysroot) ?;
166173 log:: debug!( "Get product name: '{product_name}'" ) ;
167174 assert ! ( product_name. len( ) > 0 ) ;
175+
176+ let esp_part_num = blockdev:: get_esp_partition_number ( device) ?;
177+
168178 // clear all the boot entries that match the target name
169179 clear_efi_target ( & product_name) ?;
170- create_efi_boot_entry ( device, espdir , vendordir , & product_name)
180+ create_efi_boot_entry ( device, esp_part_num . trim ( ) , & loader , & product_name)
171181 }
172182}
173183
@@ -669,34 +679,20 @@ pub(crate) fn clear_efi_target(target: &str) -> Result<()> {
669679#[ context( "Adding new EFI boot entry" ) ]
670680pub ( crate ) fn create_efi_boot_entry (
671681 device : & str ,
672- espdir : & openat :: Dir ,
673- vendordir : & str ,
682+ esp_partition_number : & str ,
683+ loader : & str ,
674684 target : & str ,
675685) -> Result < ( ) > {
676- let fsinfo = crate :: filesystem:: inspect_filesystem ( espdir, "." ) ?;
677- let source = fsinfo. source ;
678- let devname = source
679- . rsplit_once ( '/' )
680- . ok_or_else ( || anyhow:: anyhow!( "Failed to parse {source}" ) ) ?
681- . 1 ;
682- let partition_path = format ! ( "/sys/class/block/{devname}/partition" ) ;
683- let partition_number = std:: fs:: read_to_string ( & partition_path)
684- . with_context ( || format ! ( "Failed to read {partition_path}" ) ) ?;
685- let shim = format ! ( "{vendordir}/{SHIM}" ) ;
686- if espdir. exists ( & shim) ? {
687- anyhow:: bail!( "Failed to find {SHIM}" ) ;
688- }
689- let loader = format ! ( "\\ EFI\\ {}\\ {SHIM}" , vendordir) ;
690686 log:: debug!( "Creating new EFI boot entry using '{target}'" ) ;
691687 let mut cmd = Command :: new ( EFIBOOTMGR ) ;
692688 cmd. args ( [
693689 "--create" ,
694690 "--disk" ,
695691 device,
696692 "--part" ,
697- partition_number . trim ( ) ,
693+ esp_partition_number ,
698694 "--loader" ,
699- loader. as_str ( ) ,
695+ loader,
700696 "--label" ,
701697 target,
702698 ] ) ;
0 commit comments