from mkosi.kmod import gen_required_kernel_modules, process_kernel_modules
from mkosi.log import ARG_DEBUG, complete_step, die, log_notice, log_step
from mkosi.manifest import Manifest
-from mkosi.mounts import mount_overlay
+from mkosi.mounts import finalize_ephemeral_source_mounts, mount_overlay
from mkosi.pager import page
from mkosi.partition import Partition, finalize_root, finalize_roothash
from mkosi.qemu import KernelType, copy_ephemeral, run_qemu, run_ssh
yield context.root
-@contextlib.contextmanager
-def finalize_source_mounts(config: Config) -> Iterator[list[PathString]]:
- with contextlib.ExitStack() as stack:
- mounts = [
- (stack.enter_context(mount_overlay([source])) if config.build_sources_ephemeral else source, target)
- for source, target
- in (t.with_prefix(Path("/work/src")) for t in config.build_sources)
- ]
-
- options: list[PathString] = ["--dir", "/work/src"]
- for src, target in sorted(set(mounts), key=lambda s: s[1]):
- options += ["--bind", src, target]
-
- yield options
-
-
@contextlib.contextmanager
def finalize_scripts(scripts: Mapping[str, Sequence[PathString]] = {}) -> Iterator[Path]:
with tempfile.TemporaryDirectory(prefix="mkosi-scripts") as d:
step_msg = "Running prepare script {}…"
arg = "final"
- sources = stack.enter_context(finalize_source_mounts(context.config))
+ sources = stack.enter_context(finalize_ephemeral_source_mounts(context.config))
cd = stack.enter_context(finalize_chroot_scripts(context))
for script in context.config.prepare_scripts:
with (
mount_build_overlay(context, volatile=True),
finalize_chroot_scripts(context) as cd,
- finalize_source_mounts(context.config) as sources,
+ finalize_ephemeral_source_mounts(context.config) as sources,
):
for script in context.config.build_scripts:
chroot = chroot_cmd(
with (
finalize_chroot_scripts(context) as cd,
- finalize_source_mounts(context.config) as sources,
+ finalize_ephemeral_source_mounts(context.config) as sources,
):
for script in context.config.postinst_scripts:
chroot = chroot_cmd(
with (
finalize_chroot_scripts(context) as cd,
- finalize_source_mounts(context.config) as sources,
+ finalize_ephemeral_source_mounts(context.config) as sources,
):
for script in context.config.finalize_scripts:
chroot = chroot_cmd(
from collections.abc import Sequence
from mkosi.context import Context
+from mkosi.mounts import finalize_source_mounts
from mkosi.run import find_binary, run
from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
from mkosi.types import PathString
"--bind", context.cache_dir / "cache/apt", context.cache_dir / "cache/apt",
"--ro-bind", context.workspace / "apt.conf", context.workspace / "apt.conf",
*finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_source_mounts(context.config),
*mounts,
+ "--chdir", "/work/src",
],
) + (apivfs_cmd(context.root) if apivfs else [])
),
from mkosi.context import Context
from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
+from mkosi.mounts import finalize_source_mounts
from mkosi.run import find_binary, run
from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
from mkosi.types import PathString
context.cache_dir / "lib" / dnf_subdir(context),
context.cache_dir / "lib" / dnf_subdir(context),
*finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_source_mounts(context.config),
+ "--chdir", "/work/src",
],
) + (apivfs_cmd(context.root) if apivfs else [])
),
from typing import NamedTuple
from mkosi.context import Context
+from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
from mkosi.types import PathString
"--bind", context.root, context.root,
"--bind", context.cache_dir / "cache/pacman/pkg", context.cache_dir / "cache/pacman/pkg",
*finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_source_mounts(context.config),
+ "--chdir", "/work/src",
],
) + (apivfs_cmd(context.root) if apivfs else [])
),
from mkosi.config import yes_no
from mkosi.context import Context
from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
+from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
from mkosi.types import PathString
"--bind", context.root, context.root,
"--bind", context.cache_dir / "cache/zypp", context.cache_dir / "cache/zypp",
*finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_source_mounts(context.config),
+ "--chdir", "/work/src",
],
) + (apivfs_cmd(context.root) if apivfs else [])
),
from pathlib import Path
from typing import Optional
+from mkosi.config import Config
from mkosi.run import run
from mkosi.types import PathString
from mkosi.util import umask
yield where
finally:
delete_whiteout_files(upperdir)
+
+
+def finalize_source_mounts(config: Config) -> list[PathString]:
+ mounts = {t.with_prefix(Path("/work/src")) for t in config.build_sources}
+
+ options: list[PathString] = ["--dir", "/work/src"]
+ for src, target in sorted(mounts, key=lambda s: s[1]):
+ options += ["--ro-bind", src, target]
+
+ return options
+
+
+@contextlib.contextmanager
+def finalize_ephemeral_source_mounts(config: Config) -> Iterator[list[PathString]]:
+ with contextlib.ExitStack() as stack:
+ mounts = (
+ (stack.enter_context(mount_overlay([source])) if config.build_sources_ephemeral else source, target)
+ for source, target
+ in {t.with_prefix(Path("/work/src")) for t in config.build_sources}
+ )
+
+ options: list[PathString] = ["--dir", "/work/src"]
+ for src, target in sorted(mounts, key=lambda s: s[1]):
+ options += ["--bind", src, target]
+
+ yield options