|
61 | 61 | //! 1. **Primary**: New/upgraded deployment (default boot target) |
62 | 62 | //! 2. **Secondary**: Currently booted deployment (rollback option) |
63 | 63 |
|
64 | | -use std::ffi::OsStr; |
65 | 64 | use std::fs::create_dir_all; |
| 65 | +use std::io::Read; |
66 | 66 | use std::io::Write; |
67 | 67 | use std::path::Path; |
68 | 68 |
|
@@ -451,41 +451,22 @@ fn write_bls_boot_entries_to_disk( |
451 | 451 | } |
452 | 452 |
|
453 | 453 | /// Parses /usr/lib/os-release and returns (id, title, version) |
454 | | -fn parse_os_release( |
455 | | - fs: &crate::store::ComposefsFilesystem, |
456 | | - repo: &crate::store::ComposefsRepository, |
457 | | -) -> Result<Option<(String, Option<String>, Option<String>)>> { |
| 454 | +/// Expects a referenece to the root of the filesystem, or the root |
| 455 | +/// of a mounted EROFS |
| 456 | +pub fn parse_os_release(root: &Dir) -> Result<Option<(String, Option<String>, Option<String>)>> { |
458 | 457 | // Every update should have its own /usr/lib/os-release |
459 | | - let (dir, fname) = fs |
460 | | - .root |
461 | | - .split(OsStr::new("/usr/lib/os-release")) |
462 | | - .context("Getting /usr/lib/os-release")?; |
463 | | - |
464 | | - let os_release = dir |
465 | | - .get_file_opt(fname) |
466 | | - .context("Getting /usr/lib/os-release")?; |
| 458 | + let file = root |
| 459 | + .open_optional("usr/lib/os-release") |
| 460 | + .context("Opening usr/lib/os-release")?; |
467 | 461 |
|
468 | | - let Some(os_rel_file) = os_release else { |
| 462 | + let Some(mut os_rel_file) = file else { |
469 | 463 | return Ok(None); |
470 | 464 | }; |
471 | 465 |
|
472 | | - let file_contents = match read_file(os_rel_file, repo) { |
473 | | - Ok(c) => c, |
474 | | - Err(e) => { |
475 | | - tracing::warn!("Could not read /usr/lib/os-release: {e:?}"); |
476 | | - return Ok(None); |
477 | | - } |
478 | | - }; |
479 | | - |
480 | | - let file_contents = match std::str::from_utf8(&file_contents) { |
481 | | - Ok(c) => c, |
482 | | - Err(e) => { |
483 | | - tracing::warn!("/usr/lib/os-release did not have valid UTF-8: {e}"); |
484 | | - return Ok(None); |
485 | | - } |
486 | | - }; |
| 466 | + let mut file_contents = String::new(); |
| 467 | + os_rel_file.read_to_string(&mut file_contents)?; |
487 | 468 |
|
488 | | - let parsed = OsReleaseInfo::parse(file_contents); |
| 469 | + let parsed = OsReleaseInfo::parse(&file_contents); |
489 | 470 |
|
490 | 471 | let os_id = parsed |
491 | 472 | .get_value(&["ID"]) |
@@ -521,7 +502,7 @@ pub(crate) fn setup_composefs_bls_boot( |
521 | 502 | ) -> Result<String> { |
522 | 503 | let id_hex = id.to_hex(); |
523 | 504 |
|
524 | | - let (root_path, esp_device, mut cmdline_refs, fs, bootloader) = match setup_type { |
| 505 | + let (root_path, esp_device, mut cmdline_refs, _, bootloader) = match setup_type { |
525 | 506 | BootSetupType::Setup((root_setup, state, postfetch, fs)) => { |
526 | 507 | // root_setup.kargs has [root=UUID=<UUID>, "rw"] |
527 | 508 | let mut cmdline_options = Cmdline::new(); |
@@ -668,7 +649,7 @@ pub(crate) fn setup_composefs_bls_boot( |
668 | 649 | let boot_digest = compute_boot_digest(usr_lib_modules_vmlinuz, &repo) |
669 | 650 | .context("Computing boot digest")?; |
670 | 651 |
|
671 | | - let osrel = parse_os_release(fs, &repo)?; |
| 652 | + let osrel = parse_os_release(mounted_erofs)?; |
672 | 653 |
|
673 | 654 | let (os_id, title, version, sort_key) = match osrel { |
674 | 655 | Some((id_str, title_opt, version_opt)) => ( |
|
0 commit comments