)
from mkosi.context import Context
from mkosi.distributions import Distribution
-from mkosi.installer import clean_package_manager_metadata, package_manager_scripts
+from mkosi.installer import (
+ clean_package_manager_metadata,
+ finalize_package_manager_mounts,
+ package_manager_scripts,
+)
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
run,
unshare,
)
-from mkosi.sandbox import chroot_cmd, finalize_crypto_mounts, finalize_passwd_mounts
+from mkosi.sandbox import chroot_cmd, finalize_passwd_mounts
from mkosi.tree import copy_tree, move_tree, rmtree
from mkosi.types import PathString
from mkosi.util import (
sandbox=context.sandbox(
network=True,
options=sources + [
- # If the cache dir is /var and the workspace directory is /var/tmp (e.g. in mkosi-initrd),
- # then all the files we mount here might be located in the configured cache directory, so
- # we have to mount the cache directory first to not override all the other mounts.
- "--bind", context.cache_dir, context.cache_dir,
"--ro-bind", script, "/work/prepare",
"--ro-bind", cd, "/work/scripts",
"--bind", context.root, context.root,
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
"--chdir", "/work/src",
],
scripts=hd,
if context.config.build_dir
else []
),
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
"--chdir", "/work/src",
],
scripts=hd,
"--ro-bind", cd, "/work/scripts",
"--bind", context.root, context.root,
"--bind", context.staging, "/work/out",
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
"--chdir", "/work/src",
],
scripts=hd,
"--ro-bind", cd, "/work/scripts",
"--bind", context.root, context.root,
"--bind", context.staging, "/work/out",
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
"--chdir", "/work/src",
],
scripts=hd,
from mkosi.config import ConfigFeature
from mkosi.context import Context
-from mkosi.installer.apt import apt_cmd
-from mkosi.installer.dnf import dnf_cmd
-from mkosi.installer.pacman import pacman_cmd
-from mkosi.installer.rpm import rpm_cmd
-from mkosi.installer.zypper import zypper_cmd
-from mkosi.sandbox import apivfs_cmd
+from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
from mkosi.tree import rmtree
from mkosi.types import PathString
+from mkosi.util import flatten
def clean_package_manager_metadata(context: Context) -> None:
def package_manager_scripts(context: Context) -> dict[str, list[PathString]]:
+ from mkosi.installer.apt import apt_cmd
+ from mkosi.installer.dnf import dnf_cmd
+ from mkosi.installer.pacman import pacman_cmd
+ from mkosi.installer.rpm import rpm_cmd
+ from mkosi.installer.zypper import zypper_cmd
+
return {
"pacman": apivfs_cmd(context.root) + pacman_cmd(context),
"zypper": apivfs_cmd(context.root) + zypper_cmd(context),
"apt-sortpkgs",
)
}
+
+
+def finalize_package_manager_mounts(context: Context) -> list[PathString]:
+ from mkosi.installer.dnf import dnf_subdir
+
+ mounts: list[PathString] = [
+ *(["--ro-bind", m, m] if (m := context.config.local_mirror) else []),
+ *(["--ro-bind", os.fspath(p), os.fspath(p)] if (p := context.workspace / "apt.conf").exists() else []),
+ *finalize_crypto_mounts(tools=context.config.tools()),
+ ]
+
+ mounts += flatten(
+ ["--bind", d, d]
+ for d in (
+ context.cache_dir / "lib/apt",
+ context.cache_dir / "cache/apt",
+ context.cache_dir / "cache" / dnf_subdir(context),
+ context.cache_dir / "lib" / dnf_subdir(context),
+ context.cache_dir / "cache/pacman/pkg",
+ context.cache_dir / "cache/zypp",
+ )
+ if d.exists()
+ )
+
+ return mounts
from collections.abc import Sequence
from mkosi.context import Context
+from mkosi.installer import finalize_package_manager_mounts
from mkosi.mounts import finalize_ephemeral_source_mounts
from mkosi.run import find_binary, run
-from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
+from mkosi.sandbox import apivfs_cmd
from mkosi.types import PathString
from mkosi.util import sort_packages, umask
network=True,
options=[
"--bind", context.root, context.root,
- "--bind", context.cache_dir / "lib/apt", context.cache_dir / "lib/apt",
- "--bind", context.cache_dir / "cache/apt", context.cache_dir / "cache/apt",
- "--ro-bind", context.workspace / "apt.conf", context.workspace / "apt.conf",
- *(["--ro-bind", m, m] if (m := context.config.local_mirror) else []),
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
*sources,
*mounts,
"--chdir", "/work/src",
from pathlib import Path
from mkosi.context import Context
+from mkosi.installer import finalize_package_manager_mounts
from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
from mkosi.mounts import finalize_ephemeral_source_mounts
from mkosi.run import find_binary, run
-from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
+from mkosi.sandbox import apivfs_cmd
from mkosi.types import PathString
from mkosi.util import sort_packages
network=True,
options=[
"--bind", context.root, context.root,
- "--bind",
- context.cache_dir / "cache" / dnf_subdir(context),
- context.cache_dir / "cache" / dnf_subdir(context),
- "--bind",
- context.cache_dir / "lib" / dnf_subdir(context),
- context.cache_dir / "lib" / dnf_subdir(context),
- *(["--ro-bind", m, m] if (m := context.config.local_mirror) else []),
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
*sources,
"--chdir", "/work/src",
],
from typing import NamedTuple
from mkosi.context import Context
+from mkosi.installer import finalize_package_manager_mounts
from mkosi.mounts import finalize_ephemeral_source_mounts
from mkosi.run import run
-from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
+from mkosi.sandbox import apivfs_cmd
from mkosi.types import PathString
from mkosi.util import sort_packages, umask
network=True,
options=[
"--bind", context.root, context.root,
- "--bind", context.cache_dir / "cache/pacman/pkg", context.cache_dir / "cache/pacman/pkg",
- *(["--ro-bind", m, m] if (m := context.config.local_mirror) else []),
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
*sources,
"--chdir", "/work/src",
],
from mkosi.config import yes_no
from mkosi.context import Context
+from mkosi.installer import finalize_package_manager_mounts
from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
from mkosi.mounts import finalize_ephemeral_source_mounts
from mkosi.run import run
-from mkosi.sandbox import apivfs_cmd, finalize_crypto_mounts
+from mkosi.sandbox import apivfs_cmd
from mkosi.types import PathString
from mkosi.util import sort_packages
network=True,
options=[
"--bind", context.root, context.root,
- "--bind", context.cache_dir / "cache/zypp", context.cache_dir / "cache/zypp",
- *(["--ro-bind", m, m] if (m := context.config.local_mirror) else []),
- *finalize_crypto_mounts(tools=context.config.tools()),
+ *finalize_package_manager_mounts(context),
*sources,
"--chdir", "/work/src",
],