From 00c656c3acc1d6b961f9a75b98b660a8b94a2072 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 11 Sep 2021 11:41:58 +0200 Subject: More build dir reorganization - Rename work layer to "layer" - Only preserve a work subdir of the build home - Move downloads and destination dir out of work dir --- src/runner/runc/run.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/runner/runc/run.rs') diff --git a/src/runner/runc/run.rs b/src/runner/runc/run.rs index beb949d..2e4bfea 100644 --- a/src/runner/runc/run.rs +++ b/src/runner/runc/run.rs @@ -14,25 +14,25 @@ use super::spec; fn init_task(task: &runner::Task) -> Result<()> { let task_state_dir = paths::task_state_dir(&task.input_hash); - let task_build_dir = paths::join(&[&task_state_dir, paths::TASK_STATE_BUILD_SUBDIR]); + let task_layer_dir = paths::join(&[&task_state_dir, paths::TASK_STATE_LAYER_SUBDIR]); let task_work_dir = paths::join(&[&task_state_dir, paths::TASK_STATE_WORK_SUBDIR]); util::fs::mkdir(&task_work_dir)?; - util::fs::mkdir(&task_build_dir)?; + util::fs::mkdir(&task_layer_dir)?; let task_tmp_dir = paths::task_tmp_dir(&task.input_hash); - let mount_target = paths::join(&[&task_tmp_dir, paths::TASK_TMP_BUILD_SUBDIR]); + let mount_target = paths::join(&[&task_tmp_dir, paths::TASK_TMP_WORK_SUBDIR]); util::fs::mkdir(&mount_target)?; util::fs::mkdir(paths::join(&[ &task_tmp_dir, - paths::TASK_TMP_DEPENDS_SUBDIR, + paths::TASK_TMP_SYSROOT_SUBDIR, paths::SYSROOT_PREFIX, ]))?; if task.inherit.is_empty() { mount::mount::<_, _, _, str>( - Some(task_build_dir.as_str()), + Some(task_layer_dir.as_str()), mount_target.as_str(), Some("none"), MsFlags::MS_BIND, @@ -46,7 +46,7 @@ fn init_task(task: &runner::Task) -> Result<()> { .map(|hash| { paths::join(&[ &paths::task_state_dir(hash), - &paths::TASK_STATE_BUILD_SUBDIR, + &paths::TASK_STATE_LAYER_SUBDIR, ]) }) .collect::>() @@ -54,7 +54,7 @@ fn init_task(task: &runner::Task) -> Result<()> { let options = format!( "lowerdir={lower},upperdir={upper},workdir={work}", lower = lower, - upper = task_build_dir, + upper = task_layer_dir, work = task_work_dir ); mount::mount::<_, _, _, str>( @@ -72,11 +72,13 @@ fn init_task(task: &runner::Task) -> Result<()> { fn cleanup_task(task: &runner::Task) -> Result<()> { let task_tmp_dir = paths::task_tmp_dir(&task.input_hash); - let mount_target = paths::join(&[&task_tmp_dir, paths::TASK_TMP_BUILD_SUBDIR]); + let mount_target = paths::join(&[&task_tmp_dir, paths::TASK_TMP_WORK_SUBDIR]); mount::umount(mount_target.as_str()) .with_context(|| format!("Failed to unmount {}", mount_target))?; + util::fs::ensure_removed(&task_tmp_dir).context("Failed to remove task tmp dir")?; + let task_state_dir = paths::task_state_dir(&task.input_hash); let task_work_dir = paths::join(&[&task_state_dir, paths::TASK_STATE_WORK_SUBDIR]); util::fs::ensure_removed(&task_work_dir).context("Failed to remove overlayfs workdir")?; @@ -104,18 +106,22 @@ fn unpack_dependency, P2: AsRef>(filename: P1, dest: P2) - fn unpack_dependencies(task: &runner::Task) -> Result<()> { let task_tmp_dir = paths::task_tmp_dir(&task.input_hash); + let downloads_dir = paths::join(&[&task_tmp_dir, paths::TASK_TMP_DOWNLOADS_SUBDIR]); + + util::fs::mkdir(&downloads_dir)?; + for dep in task.depends.values() { match dep { Output::Fetch { name, .. } => { util::fs::copy( paths::join(&[paths::DOWNLOADS_DIR, name]), - paths::join(&[&task_tmp_dir, paths::TASK_TMP_BUILD_SUBDIR, name]), + paths::join(&[&downloads_dir, name]), )?; } Output::Run(hash) => { unpack_dependency( paths::archive_filename(hash), - paths::join(&[&task_tmp_dir, paths::TASK_TMP_DEPENDS_SUBDIR]), + paths::join(&[&task_tmp_dir, paths::TASK_TMP_SYSROOT_SUBDIR]), )?; } } -- cgit v1.2.3