From: Daan De Meyer Date: Mon, 8 Jul 2024 08:15:36 +0000 (+0200) Subject: Use subdirectory of build directory for each subimage X-Git-Tag: v24~50^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1856bdc9e9b7e5b2910cebd1125fabb6155474c;p=thirdparty%2Fmkosi.git Use subdirectory of build directory for each subimage Instead of sharing the build directory between all images, let's use a subdirectory of the build directory for subimages. This requires us to unshare the user namespace in run_build() before we create the directories so that we always have permissions to create any nested build directories. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 3817a0935..a9b8f024f 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -4651,6 +4651,12 @@ def run_sync(args: Args, config: Config, *, resources: Path) -> None: def run_build(args: Args, config: Config, *, resources: Path) -> None: + if (uid := os.getuid()) != 0: + become_root() + unshare(CLONE_NEWNS) + if uid == 0: + run(["mount", "--make-rslave", "/"]) + for p in ( config.output_dir, config.cache_dir, @@ -4664,12 +4670,6 @@ def run_build(args: Args, config: Config, *, resources: Path) -> None: p.mkdir(parents=True, exist_ok=True) INVOKING_USER.chown(p) - if (uid := os.getuid()) != 0: - become_root() - unshare(CLONE_NEWNS) - if uid == 0: - run(["mount", "--make-rslave", "/"]) - if config.build_dir: # Make sure the build directory is owned by root (in the user namespace) so that the correct uid-mapping is # applied if it is used in RuntimeTrees= diff --git a/mkosi/config.py b/mkosi/config.py index 88f8b3786..f8abd99d5 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -3851,7 +3851,9 @@ def load_args(args: argparse.Namespace) -> Args: def load_config(config: argparse.Namespace) -> Config: if config.build_dir: - config.build_dir = config.build_dir / f"{config.distribution}~{config.release}~{config.architecture}" + config.build_dir /= config.build_dir / f"{config.distribution}~{config.release}~{config.architecture}" + if config.image: + config.build_dir /= config.image if config.sign: config.checksum = True