From 2b2a16ee2b97c1fbf2902e62f5db1e04f09ee9a6 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Mon, 6 Nov 2023 12:13:10 +0100 Subject: [PATCH] Create volatile overlay if no upperdir is specified --- mkosi/__init__.py | 5 +---- mkosi/mounts.py | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 42d62d350..10891ae72 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -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 diff --git a/mkosi/mounts.py b/mkosi/mounts.py index bc1dd5405..bda576e35 100644 --- a/mkosi/mounts.py +++ b/mkosi/mounts.py @@ -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}", -- 2.47.3