Skip to content

Commit 2352767

Browse files
authored
Merge pull request #1010 from martinezjavier/optional-update-metadata
Allow to skip BIOS component installation for x86_64
2 parents de779db + f9de0fd commit 2352767

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

src/bios.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,17 @@ impl Component for Bios {
127127
})
128128
}
129129

130-
fn generate_update_metadata(&self, sysroot_path: &str) -> Result<ContentMetadata> {
130+
fn generate_update_metadata(&self, sysroot_path: &str) -> Result<Option<ContentMetadata>> {
131131
let grub_install = Path::new(sysroot_path).join(GRUB_BIN);
132132
if !grub_install.exists() {
133-
bail!("Failed to find {:?}", grub_install);
133+
println!("Failed to find {:?}", grub_install);
134+
return Ok(None);
134135
}
135136

136137
// Query the rpm database and list the package and build times for /usr/sbin/grub2-install
137138
let meta = packagesystem::query_files(sysroot_path, [&grub_install])?;
138139
write_update_metadata(sysroot_path, self, &meta)?;
139-
Ok(meta)
140+
Ok(Some(meta))
140141
}
141142

142143
fn query_adopt(&self, devices: &Option<Vec<String>>) -> Result<Option<Adoptable>> {

src/bootupd.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ pub(crate) fn install(
9393
continue;
9494
}
9595

96+
// skip components that don't have an update metadata
97+
if component.query_update(&source_root_dir)?.is_none() {
98+
println!(
99+
"Skip installing component {} without update metadata",
100+
component.name()
101+
);
102+
continue;
103+
}
104+
96105
let meta = component
97106
.install(&source_root, dest_root, device, update_firmware)
98107
.with_context(|| format!("installing component {}", component.name()))?;
@@ -199,12 +208,18 @@ pub(crate) fn generate_update_metadata(sysroot_path: &str) -> Result<()> {
199208
std::fs::create_dir_all(&updates_dir)
200209
.with_context(|| format!("Failed to create updates dir {:?}", &updates_dir))?;
201210
for component in get_components().values() {
202-
let v = component.generate_update_metadata(sysroot_path)?;
203-
println!(
204-
"Generated update layout for {}: {}",
205-
component.name(),
206-
v.version,
207-
);
211+
if let Some(v) = component.generate_update_metadata(sysroot_path)? {
212+
println!(
213+
"Generated update layout for {}: {}",
214+
component.name(),
215+
v.version,
216+
);
217+
} else {
218+
println!(
219+
"Generating update layout for {} was not possible, skipping.",
220+
component.name(),
221+
);
222+
}
208223
}
209224

210225
Ok(())

src/component.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ pub(crate) trait Component {
6262
/// this is an `rpm-ostree compose tree` for example. For a dual-partition
6363
/// style updater, this would be run as part of a postprocessing step
6464
/// while the filesystem for the partition is mounted.
65-
fn generate_update_metadata(&self, sysroot: &str) -> Result<ContentMetadata>;
65+
fn generate_update_metadata(&self, sysroot: &str) -> Result<Option<ContentMetadata>>;
6666

6767
/// Used on the client to query for an update cached in the current booted OS.
6868
fn query_update(&self, sysroot: &openat::Dir) -> Result<Option<ContentMetadata>>;

src/efi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ impl Component for Efi {
460460
})
461461
}
462462

463-
fn generate_update_metadata(&self, sysroot: &str) -> Result<ContentMetadata> {
463+
fn generate_update_metadata(&self, sysroot: &str) -> Result<Option<ContentMetadata>> {
464464
let sysroot_path = Utf8Path::new(sysroot);
465465

466466
// copy EFI files to updates dir from usr/lib/efi
@@ -533,7 +533,7 @@ impl Component for Efi {
533533
};
534534

535535
write_update_metadata(sysroot, self, &meta)?;
536-
Ok(meta)
536+
Ok(Some(meta))
537537
}
538538

539539
fn query_update(&self, sysroot: &openat::Dir) -> Result<Option<ContentMetadata>> {

0 commit comments

Comments
 (0)