Skip to content

Commit eea4124

Browse files
authored
Merge pull request bootc-dev#685 from HuijingHei/anaconda-label
efi: sync bootentry label with Anaconda
2 parents b9fd030 + 47557c3 commit eea4124

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ openat = "0.1.20"
3434
openat-ext = ">= 0.2.2, < 0.3.0"
3535
openssl = "^0.10"
3636
os-release = "0.1.0"
37+
regex = "1.10.4"
3738
rustix = { version = "0.38.34", features = ["process", "fs"] }
3839
serde = { version = "^1.0", features = ["derive"] }
3940
serde_json = "^1.0"

src/efi.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,28 @@ impl Efi {
139139
log::debug!("Not booted via EFI, skipping firmware update");
140140
return Ok(());
141141
}
142-
// Read /etc/os-release
143-
let release: OsRelease = OsRelease::new()?;
144-
let product_name: &str = &release.name;
142+
let product_name = get_product_name()?;
145143
log::debug!("Get product name: {product_name}");
146144
assert!(product_name.len() > 0);
147145
// clear all the boot entries that match the target name
148-
clear_efi_target(product_name)?;
149-
create_efi_boot_entry(device, espdir, vendordir, product_name)
146+
clear_efi_target(&product_name)?;
147+
create_efi_boot_entry(device, espdir, vendordir, &product_name)
150148
}
151149
}
152150

151+
#[context("Get product name")]
152+
fn get_product_name() -> Result<String> {
153+
let file_path = Path::new("/etc/system-release");
154+
if file_path.exists() {
155+
let content = std::fs::read_to_string(file_path)?;
156+
let re = regex::Regex::new(r" *release.*").unwrap();
157+
return Ok(re.replace_all(&content, "").to_string());
158+
}
159+
// Read /etc/os-release
160+
let release: OsRelease = OsRelease::new()?;
161+
Ok(release.name)
162+
}
163+
153164
/// Convert a nul-terminated UTF-16 byte array to a String.
154165
fn string_from_utf16_bytes(slice: &[u8]) -> String {
155166
// For some reason, systemd appends 3 nul bytes after the string.
@@ -659,4 +670,10 @@ Boot0003* test";
659670
);
660671
Ok(())
661672
}
673+
#[test]
674+
fn test_get_product_name() -> Result<()> {
675+
let name = get_product_name()?;
676+
assert!(name.len() > 0);
677+
Ok(())
678+
}
662679
}

0 commit comments

Comments
 (0)