diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-07-17 20:30:26 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-07-17 20:30:26 +0200 |
commit | ac869b81bc84f18a0a5428c059e3779e27020755 (patch) | |
tree | 23e6a67af5a9a1c190331738fd55fe47bb6af7d7 | |
parent | 923217e7e00749335877efd57173a63305dab133 (diff) | |
download | rebel-ac869b81bc84f18a0a5428c059e3779e27020755.tar rebel-ac869b81bc84f18a0a5428c059e3779e27020755.zip |
runc: unpack dependency sysroots
-rw-r--r-- | src/runner/runc/run.rs | 22 |
1 files 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<OutputHash, io::Error> { let filename = tmp_filename(&task); let file = util::unix::create_as( @@ -106,6 +123,7 @@ fn collect_output(task: Task) -> Result<OutputHash, io::Error> { pub fn handle_task(task: Task) -> Result<OutputHash, Error> { init_task()?; + unpack_dependencies(&task)?; spec::generate_spec(task.def.run.as_str(), &task.env) .save("build/tmp/runc/config.json") |