]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Create volatile overlay if no upperdir is specified
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 6 Nov 2023 11:13:10 +0000 (12:13 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 6 Nov 2023 16:09:34 +0000 (17:09 +0100)
mkosi/__init__.py
mkosi/mounts.py

index 42d62d350cd28b5835f1fbb1fb8270df9afc07f3..10891ae723bf642beb631a7cb3c5056d297e5c37 100644 (file)
@@ -312,10 +312,7 @@ def mount_build_overlay(state: MkosiState, volatile: bool = False) -> Iterator[P
 
         if volatile:
             lower += [d]
-            upper = Path(stack.enter_context(tempfile.TemporaryDirectory(prefix="build-overlay-volatile")))
-            st = d.stat()
-            os.chmod(upper, st.st_mode)
-            os.chown(upper, st.st_uid, st.st_gid)
+            upper = None
         else:
             upper = d
 
index bc1dd5405b2532c2fddc841ebc763e0a04675547..bda576e3556026da1252f3526ceb744b62f6d34b 100644 (file)
@@ -72,8 +72,25 @@ def mount(
 
 
 @contextlib.contextmanager
-def mount_overlay(lowerdirs: Sequence[Path], upperdir: Path, where: Path) -> Iterator[Path]:
-    with tempfile.TemporaryDirectory(dir=upperdir.parent, prefix=f"{upperdir.name}-workdir") as workdir:
+def mount_overlay(lowerdirs: Sequence[Path], upperdir: Optional[Path] = None, where: Optional[Path] = None) -> Iterator[Path]:
+    with contextlib.ExitStack() as stack:
+        if upperdir is None:
+            upperdir = Path(stack.enter_context(tempfile.TemporaryDirectory(prefix="volatile-overlay")))
+            st = lowerdirs[-1].stat()
+            os.chmod(upperdir, st.st_mode)
+            os.chown(upperdir, st.st_uid, st.st_gid)
+
+        workdir = Path(
+            stack.enter_context(tempfile.TemporaryDirectory(dir=upperdir.parent, prefix=f"{upperdir.name}-workdir"))
+        )
+
+        if where is None:
+            where = Path(
+                stack.enter_context(
+                    tempfile.TemporaryDirectory(dir=upperdir.parent, prefix=f"{upperdir.name}-mountpoint")
+                )
+            )
+
         options = [
             f"lowerdir={':'.join(os.fspath(p) for p in reversed(lowerdirs))}",
             f"upperdir={upperdir}",