forked from bootc-dev/bootc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.rs
More file actions
54 lines (43 loc) · 1.52 KB
/
Copy pathutils.rs
File metadata and controls
54 lines (43 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use crate::{
bootc_composefs::{
boot::{BOOTC_UKI_DIR, compute_boot_digest_uki, get_uki_name},
state::update_boot_digest_in_origin,
},
store::Storage,
};
use anyhow::Result;
use bootc_kernel_cmdline::utf8::Cmdline;
use composefs_ctl::composefs_boot;
use fn_error_context::context;
fn get_uki(storage: &Storage, deployment_verity: &str) -> Result<cap_std_ext::cap_std::fs::File> {
let uki_dir = storage.require_esp()?.fd.open_dir(BOOTC_UKI_DIR)?;
let req_fname = get_uki_name(deployment_verity);
for entry in uki_dir.entries_utf8()? {
let pe = entry?;
let filename = pe.file_name()?;
if filename != req_fname {
continue;
}
return Ok(uki_dir.open(filename)?);
}
anyhow::bail!("UKI for deployment {deployment_verity} not found")
}
#[context("Computing and storing boot digest for UKI")]
pub(crate) fn compute_store_boot_digest_for_uki(
storage: &Storage,
deployment_verity: &str,
) -> Result<String> {
let mut uki = get_uki(storage, deployment_verity)?;
let digest = compute_boot_digest_uki(&mut uki)?;
update_boot_digest_in_origin(storage, &deployment_verity, &digest)?;
return Ok(digest);
}
#[context("Getting UKI cmdline")]
pub(crate) fn get_uki_cmdline(
storage: &Storage,
deployment_verity: &str,
) -> Result<Cmdline<'static>> {
let mut uki = get_uki(storage, deployment_verity)?;
let cmdline = composefs_boot::uki::get_cmdline_buffered(&mut uki)?;
return Ok(Cmdline::from(cmdline.to_owned()));
}