Commit

Author:

Hash:

Timestamp:

+46 -1 +/-4 browse

Kevin Schoon [me@kevinschoon.com]

a17deb12e07b35fe5dc63f9e2f8197ec4e116685

Tue, 23 Jun 2026 11:08:55 +0000 (6 days ago)

revert drop overlayfs dependency
revert drop overlayfs dependency

This reverts commit f4d4607512a6778275c39912f0df5c50c8bd97a3.
1diff --git a/PKGBUILD b/PKGBUILD
2index b2789bc..11ebe40 100644
3--- a/PKGBUILD
4+++ b/PKGBUILD
5 @@ -16,6 +16,7 @@ provides=("ayllu")
6 optdepends=(
7 "crun"
8 "runc"
9+ "fuse-overlayfs"
10 )
11 source=()
12
13 diff --git a/ayllu-build/src/main.rs b/ayllu-build/src/main.rs
14index c76de93..3cfcbb2 100644
15--- a/ayllu-build/src/main.rs
16+++ b/ayllu-build/src/main.rs
17 @@ -15,6 +15,7 @@ mod gc;
18 mod handle;
19 mod manifest;
20 mod oci_runtime;
21+ mod overlay;
22 mod runtime;
23 mod source;
24 mod workspace;
25 diff --git a/ayllu-build/src/overlay.rs b/ayllu-build/src/overlay.rs
26new file mode 100644
27index 0000000..5e442bb
28--- /dev/null
29+++ b/ayllu-build/src/overlay.rs
30 @@ -0,0 +1,36 @@
31+ use std::{
32+ path::Path,
33+ process::{Command, Stdio},
34+ };
35+
36+ pub fn mount(
37+ lower_dir: &Path,
38+ upper_dir: &Path,
39+ work_dir: &Path,
40+ target: &Path,
41+ ) -> Result<(), std::io::Error> {
42+ tracing::info!("Mounting {lower_dir:?} --> {target:?}");
43+ std::fs::create_dir_all(upper_dir)?;
44+ std::fs::create_dir_all(work_dir)?;
45+ let lower_dir = lower_dir.to_string_lossy();
46+ let upper_dir = upper_dir.to_string_lossy();
47+ let work_dir = work_dir.to_string_lossy();
48+ let target = target.to_string_lossy();
49+ let mount_str = format!("lowerdir={lower_dir},upperdir={upper_dir},workdir={work_dir}");
50+ let proc = Command::new("fuse-overlayfs")
51+ .args(["-o", &mount_str, target.as_ref()])
52+ .stderr(Stdio::piped())
53+ .spawn()?;
54+ let _output = proc.wait_with_output()?;
55+ Ok(())
56+ }
57+
58+ pub fn unmount(name: &Path) -> Result<(), std::io::Error> {
59+ let path_str = name.to_string_lossy();
60+ let proc = Command::new("umount")
61+ .args([path_str.to_string()])
62+ .spawn()
63+ .unwrap();
64+ let _ = proc.wait_with_output()?;
65+ Ok(())
66+ }
67 diff --git a/ayllu-build/src/workspace.rs b/ayllu-build/src/workspace.rs
68index c91c028..1671dd0 100644
69--- a/ayllu-build/src/workspace.rs
70+++ b/ayllu-build/src/workspace.rs
71 @@ -261,6 +261,13 @@ impl Workspace {
72 std::fs::write(self.process(resolved.step.id), proc_json)?;
73 Ok::<_, Error>(())
74 })?;
75+ #[cfg(not(test))]
76+ crate::overlay::mount(
77+ params.lower_dir,
78+ &self.overlay(),
79+ &self.workdir(),
80+ &self.rootfs(),
81+ )?;
82 if let Some(source_dir) = params.source_dir.as_ref() {
83 ayllu_git::bundle(source_dir, &self.special().join("src.bundle"), None)
84 .map_err(Error::CannotReadManifestFromRepository)?;
85 @@ -282,7 +289,7 @@ impl Workspace {
86 }
87
88 pub fn unmount(&self) -> Result<(), Error> {
89- // crate::overlay::unmount(&self.rootfs())?;
90+ crate::overlay::unmount(&self.rootfs())?;
91 Ok(())
92 }
93