File tree Expand file tree Collapse file tree 2 files changed +16
-9
lines changed
Expand file tree Collapse file tree 2 files changed +16
-9
lines changed Original file line number Diff line number Diff line change 11//! Helpers for parsing the `/run/.containerenv` file generated by podman.
22
3- use std:: fs:: File ;
43use std:: io:: { BufRead , BufReader } ;
54
6- use anyhow:: { Context , Result } ;
5+ use anyhow:: Result ;
6+ use cap_std_ext:: cap_std:: fs:: Dir ;
7+ use cap_std_ext:: prelude:: CapStdExtDirExt ;
78use fn_error_context:: context;
89
9- const PATH : & str = "/ run/.containerenv" ;
10+ const PATH : & str = "run/.containerenv" ;
1011
1112#[ derive( Debug , Default ) ]
1213pub ( crate ) struct ContainerExecutionInfo {
@@ -18,11 +19,14 @@ pub(crate) struct ContainerExecutionInfo {
1819}
1920
2021/// Load and parse the `/run/.containerenv` file.
21- #[ context( "Parsing {PATH}" ) ]
22- pub ( crate ) fn get_container_execution_info ( ) -> Result < ContainerExecutionInfo > {
23- let f = File :: open ( PATH )
24- . with_context ( || format ! ( "Opening {PATH}" ) )
25- . map ( BufReader :: new) ?;
22+ #[ context( "Querying container" ) ]
23+ pub ( crate ) fn get_container_execution_info ( rootfs : & Dir ) -> Result < ContainerExecutionInfo > {
24+ let f = match rootfs. open_optional ( PATH ) ? {
25+ Some ( f) => BufReader :: new ( f) ,
26+ None => {
27+ anyhow:: bail!( "This command must be executed inside a podman container (missing {PATH}" )
28+ }
29+ } ;
2630 let mut r = ContainerExecutionInfo :: default ( ) ;
2731 for line in f. lines ( ) {
2832 let line = line?;
Original file line number Diff line number Diff line change @@ -780,8 +780,11 @@ async fn prepare_install(
780780 crate :: cli:: require_root ( ) ?;
781781 require_systemd_pid1 ( ) ?;
782782
783+ let rootfs = cap_std:: fs:: Dir :: open_ambient_dir ( "/" , cap_std:: ambient_authority ( ) )
784+ . context ( "Opening /" ) ?;
785+
783786 // This command currently *must* be run inside a privileged container.
784- let container_info = crate :: containerenv:: get_container_execution_info ( ) ?;
787+ let container_info = crate :: containerenv:: get_container_execution_info ( & rootfs ) ?;
785788 let source = SourceInfo :: from_container ( & container_info) ?;
786789
787790 ensure_var ( ) ?;
You can’t perform that action at this time.
0 commit comments