other architectures) has been removed. The required `console=`
argument to have the kernel output to the serial console has to be
added manually from `v24` onwards.
+- Support for installing local packages located in directories in
+ `BuildSources=` was dropped. Instead, the packages can be made
+ available for installation via `PackageManagerTrees=`.
## v23.1
# SPDX-License-Identifier: LGPL-2.1-or-later
import dataclasses
-import os
import textwrap
from collections.abc import Iterable, Sequence
from pathlib import Path
from mkosi.context import Context
from mkosi.installer import PackageManager
from mkosi.log import die
-from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import Mount, apivfs_cmd
from mkosi.types import _FILE, CompletedProcess, PathString
mounts: Sequence[Mount] = (),
stdout: _FILE = None,
) -> CompletedProcess:
- with finalize_source_mounts(
- context.config,
- ephemeral=os.getuid() == 0 and context.config.build_sources_ephemeral,
- ) as sources:
- return run(
- cls.cmd(context, "apt-get") + [operation, *arguments],
- sandbox=(
- context.sandbox(
- binary="apt-get",
- network=True,
- vartmp=True,
- mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context), *sources, *mounts],
- options=["--dir", "/work/src", "--chdir", "/work/src"],
- extra=apivfs_cmd() if apivfs else []
- )
- ),
- env=context.config.environment | cls.finalize_environment(context),
- stdout=stdout,
- )
+ return run(
+ cls.cmd(context, "apt-get") + [operation, *arguments],
+ sandbox=(
+ context.sandbox(
+ binary="apt-get",
+ network=True,
+ vartmp=True,
+ mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context), *mounts],
+ extra=apivfs_cmd() if apivfs else []
+ )
+ ),
+ env=context.config.environment | cls.finalize_environment(context),
+ stdout=stdout,
+ )
@classmethod
def sync(cls, context: Context, force: bool) -> None:
# SPDX-License-Identifier: LGPL-2.1-or-later
-import os
import textwrap
from collections.abc import Iterable, Sequence
from pathlib import Path
from mkosi.installer import PackageManager
from mkosi.installer.rpm import RpmRepository, rpm_cmd
from mkosi.log import ARG_DEBUG
-from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import Mount, apivfs_cmd
from mkosi.types import _FILE, CompletedProcess, PathString
cached_metadata: bool = True,
) -> CompletedProcess:
try:
- with finalize_source_mounts(
- context.config,
- ephemeral=os.getuid() == 0 and context.config.build_sources_ephemeral,
- ) as sources:
- return run(
- cls.cmd(context, cached_metadata=cached_metadata) + [operation, *arguments],
- sandbox=(
- context.sandbox(
- binary=cls.executable(context.config),
- network=True,
- vartmp=True,
- mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context), *sources],
- options=["--dir", "/work/src", "--chdir", "/work/src"],
- extra=apivfs_cmd() if apivfs else [],
- )
- ),
- env=context.config.environment | cls.finalize_environment(context),
- stdout=stdout,
- )
+ return run(
+ cls.cmd(context, cached_metadata=cached_metadata) + [operation, *arguments],
+ sandbox=(
+ context.sandbox(
+ binary=cls.executable(context.config),
+ network=True,
+ vartmp=True,
+ mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context)],
+ extra=apivfs_cmd() if apivfs else [],
+ )
+ ),
+ env=context.config.environment | cls.finalize_environment(context),
+ stdout=stdout,
+ )
finally:
# dnf interprets the log directory relative to the install root so there's nothing we can do but to remove
# the log files from the install root afterwards.
# SPDX-License-Identifier: LGPL-2.1-or-later
import dataclasses
-import os
import shutil
import textwrap
from collections.abc import Iterable, Sequence
from mkosi.config import Config
from mkosi.context import Context
from mkosi.installer import PackageManager
-from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import Mount, apivfs_cmd
from mkosi.types import _FILE, CompletedProcess, PathString
apivfs: bool = False,
stdout: _FILE = None,
) -> CompletedProcess:
- with finalize_source_mounts(
- context.config,
- ephemeral=os.getuid() == 0 and context.config.build_sources_ephemeral,
- ) as sources:
- return run(
- cls.cmd(context) + [operation, *arguments],
- sandbox=(
- context.sandbox(
- binary="pacman",
- network=True,
- vartmp=True,
- mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context), *sources],
- options=["--dir", "/work/src", "--chdir", "/work/src"],
- extra=apivfs_cmd() if apivfs else [],
- )
- ),
- env=context.config.environment | cls.finalize_environment(context),
- stdout=stdout,
- )
+ return run(
+ cls.cmd(context) + [operation, *arguments],
+ sandbox=(
+ context.sandbox(
+ binary="pacman",
+ network=True,
+ vartmp=True,
+ mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context)],
+ extra=apivfs_cmd() if apivfs else [],
+ )
+ ),
+ env=context.config.environment | cls.finalize_environment(context),
+ stdout=stdout,
+ )
@classmethod
def sync(cls, context: Context, force: bool) -> None:
# SPDX-License-Identifier: LGPL-2.1-or-later
import hashlib
-import os
import textwrap
from collections.abc import Iterable, Sequence
from pathlib import Path
from mkosi.context import Context
from mkosi.installer import PackageManager
from mkosi.installer.rpm import RpmRepository, rpm_cmd
-from mkosi.mounts import finalize_source_mounts
from mkosi.run import run
from mkosi.sandbox import Mount, apivfs_cmd
from mkosi.types import _FILE, CompletedProcess, PathString
apivfs: bool = False,
stdout: _FILE = None,
) -> CompletedProcess:
- with finalize_source_mounts(
- context.config,
- ephemeral=os.getuid() == 0 and context.config.build_sources_ephemeral,
- ) as sources:
- return run(
- cls.cmd(context) + [operation, *arguments],
- sandbox=(
- context.sandbox(
- binary="zypper",
- network=True,
- vartmp=True,
- mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context), *sources],
- options=["--dir", "/work/src", "--chdir", "/work/src"],
- extra=apivfs_cmd() if apivfs else [],
- )
- ),
- env=context.config.environment | cls.finalize_environment(context),
- stdout=stdout,
- )
+ return run(
+ cls.cmd(context) + [operation, *arguments],
+ sandbox=(
+ context.sandbox(
+ binary="zypper",
+ network=True,
+ vartmp=True,
+ mounts=[Mount(context.root, "/buildroot"), *cls.mounts(context)],
+ extra=apivfs_cmd() if apivfs else [],
+ )
+ ),
+ env=context.config.environment | cls.finalize_environment(context),
+ stdout=stdout,
+ )
@classmethod
def sync(cls, context: Context, force: bool, arguments: Sequence[str] = ()) -> None:
python3dist(mypy)
```
- Note that since mkosi runs in a sandbox with most of the host files
- unavailable, any local packages have to be mounted into the sandbox
- explicitly using `BuildSources=`. For example, let's say we have a
- local package located at `../my-packages/abc.rpm` relative to the mkosi
- working directory, then we'd be able to install it as follows:
-
- ```ini
- BuildSources=../my-packages:my-packages-in-sandbox
- Packages=my-packages-in-sandbox/abc.rpm
- ```
-
`BuildPackages=`, `--build-package=`
: Similar to `Packages=`, but configures packages to install only in an
overlay that is made available on top of the image to the prepare