@@ -27,6 +27,8 @@ use linkme::distributed_slice;
27
27
use ostree_ext:: ostree_prepareroot;
28
28
use serde:: Serialize ;
29
29
30
+ use crate :: bootc_composefs:: boot:: EFI_LINUX ;
31
+
30
32
/// Reference to embedded default baseimage content that should exist.
31
33
const BASEIMAGE_REF : & str = "usr/share/doc/bootc/baseimage/base" ;
32
34
// https://systemd.io/API_FILE_SYSTEMS/ with /var added for us
@@ -758,14 +760,24 @@ fn check_boot(root: &Dir, config: &LintExecutionConfig) -> LintResult {
758
760
} ;
759
761
760
762
// First collect all entries to determine if the directory is empty
761
- let entries: Result < Vec < _ > , _ > = d. entries ( ) ?. collect ( ) ;
762
- let entries = entries?;
763
+ let entries: Result < BTreeSet < _ > , _ > = d
764
+ . entries ( ) ?
765
+ . into_iter ( )
766
+ . map ( |v| {
767
+ let v = v?;
768
+ anyhow:: Ok ( v. file_name ( ) )
769
+ } )
770
+ . collect ( ) ;
771
+ let mut entries = entries?;
772
+ // Work around https://github.com/containers/composefs-rs/issues/131
773
+ let efidir = Utf8Path :: new ( EFI_LINUX )
774
+ . parent ( )
775
+ . map ( |b| b. as_std_path ( ) )
776
+ . unwrap ( ) ;
777
+ entries. remove ( efidir. as_os_str ( ) ) ;
763
778
if entries. is_empty ( ) {
764
779
return lint_ok ( ) ;
765
780
}
766
- // Gather sorted filenames
767
- let mut entries = entries. iter ( ) . map ( |v| v. file_name ( ) ) . collect :: < Vec < _ > > ( ) ;
768
- entries. sort ( ) ;
769
781
770
782
let header = "Found non-empty /boot" ;
771
783
let items = entries. iter ( ) . map ( PathQuotedDisplay :: new) ;
@@ -973,6 +985,12 @@ mod tests {
973
985
let root = & passing_fixture ( ) ?;
974
986
let config = & LintExecutionConfig :: default ( ) ;
975
987
check_boot ( & root, config) . unwrap ( ) . unwrap ( ) ;
988
+
989
+ // Verify creating EFI doesn't error
990
+ root. create_dir_all ( "EFI/Linux" ) ?;
991
+ root. write ( "EFI/Linux/foo.efi" , b"some dummy efi" ) ?;
992
+ check_boot ( & root, config) . unwrap ( ) . unwrap ( ) ;
993
+
976
994
root. create_dir ( "boot/somesubdir" ) ?;
977
995
let Err ( e) = check_boot ( & root, config) . unwrap ( ) else {
978
996
unreachable ! ( )
0 commit comments