From ac869b81bc84f18a0a5428c059e3779e27020755 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 17 Jul 2021 20:30:26 +0200 Subject: runc: unpack dependency sysroots --- src/runner/runc/run.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/runner/runc/run.rs b/src/runner/runc/run.rs index e33ef50..8c7b348 100644 --- a/src/runner/runc/run.rs +++ b/src/runner/runc/run.rs @@ -1,5 +1,6 @@ use std::{ - fs, io, + fs::{self, File}, + io, path::{Path, PathBuf}, process, }; @@ -16,7 +17,7 @@ use tee_readwrite::TeeWriter; use crate::{ types::*, unshare, - util::{self, ToIOResult}, + util::{self, tar, ToIOResult}, }; use super::spec; @@ -78,6 +79,22 @@ fn output_filename(hash: &OutputHash) -> PathBuf { Path::new("build/state/output").join(format!("{}.tar", hash)) } +fn unpack_dependencies(task: &Task) -> Result<(), Error> { + for dep in task.depends.values() { + let filename = output_filename(dep); + let file = File::open(filename)?; + tar::unpack_filter(file, "build/tmp/runc/depends", |entry| { + let path = match entry.path() { + Ok(path) => path, + Err(_) => return false, + }; + path.starts_with("opt/sysroot") + })?; + } + + Ok(()) +} + fn collect_output(task: Task) -> Result { let filename = tmp_filename(&task); let file = util::unix::create_as( @@ -106,6 +123,7 @@ fn collect_output(task: Task) -> Result { pub fn handle_task(task: Task) -> Result { init_task()?; + unpack_dependencies(&task)?; spec::generate_spec(task.def.run.as_str(), &task.env) .save("build/tmp/runc/config.json") -- cgit v1.2.3