Skip to content

Commit 2caa73b

Browse files
committed
efi: update validate() to scan on all esp devices
1 parent 16c24fd commit 2caa73b

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/efi.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -422,17 +422,29 @@ impl Component for Efi {
422422
.filetree
423423
.as_ref()
424424
.ok_or_else(|| anyhow::anyhow!("No filetree for installed EFI found!"))?;
425-
self.ensure_mounted_esp(Path::new("/"))?;
426-
let efidir = self.open_esp()?;
427-
let diff = currentf.relative_diff_to(&efidir)?;
425+
428426
let mut errs = Vec::new();
429-
for f in diff.changes.iter() {
430-
errs.push(format!("Changed: {}", f));
431-
}
432-
for f in diff.removals.iter() {
433-
errs.push(format!("Removed: {}", f));
427+
let esps = esp_devices.ok_or_else(|| anyhow::anyhow!("No esp device found!"))?;
428+
let dest_root = Path::new("/");
429+
for esp_dev in esps.iter() {
430+
let dest_path = if let Some(dest_path) = self.get_mounted_esp(dest_root)? {
431+
dest_path.join("EFI")
432+
} else {
433+
self.ensure_mounted_esp(dest_root, &esp_dev)?.join("EFI")
434+
};
435+
436+
let efidir = openat::Dir::open(dest_path.as_path())?;
437+
let diff = currentf.relative_diff_to(&efidir)?;
438+
439+
for f in diff.changes.iter() {
440+
errs.push(format!("Changed: {}", f));
441+
}
442+
for f in diff.removals.iter() {
443+
errs.push(format!("Removed: {}", f));
444+
}
445+
assert_eq!(diff.additions.len(), 0);
446+
self.unmount().context("unmount after validate")?;
434447
}
435-
assert_eq!(diff.additions.len(), 0);
436448
if !errs.is_empty() {
437449
Ok(ValidationResult::Errors(errs))
438450
} else {

0 commit comments

Comments
 (0)