from mkosi.context import Context
from mkosi.distributions import Distribution, DistributionInstaller, PackageType
from mkosi.installer import PackageManager
-from mkosi.installer.apt import Apt
+from mkosi.installer.apt import Apt, AptRepository
from mkosi.log import die
from mkosi.run import run
from mkosi.sandbox import Mount
@staticmethod
@listify
- def repositories(context: Context, local: bool = True) -> Iterable[Apt.Repository]:
+ def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]:
types = ("deb", "deb-src")
components = ("main", *context.config.repositories)
if context.config.local_mirror and local:
- yield Apt.Repository(
+ yield AptRepository(
types=("deb",),
url=context.config.local_mirror,
suite=context.config.release,
mirror = context.config.mirror or "http://deb.debian.org/debian"
signedby = Path("/usr/share/keyrings/debian-archive-keyring.gpg")
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=mirror,
suite=context.config.release,
# Debug repos are typically not mirrored.
url = "http://deb.debian.org/debian-debug"
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=url,
suite=f"{context.config.release}-debug",
if context.config.release in ("unstable", "sid"):
return
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=mirror,
suite=f"{context.config.release}-updates",
signedby=signedby,
)
- yield Apt.Repository(
+ yield AptRepository(
types=types,
# Security updates repos are never mirrored.
url="http://security.debian.org/debian-security",
return a
-def install_apt_sources(context: Context, repos: Iterable[Apt.Repository]) -> None:
+def install_apt_sources(context: Context, repos: Iterable[AptRepository]) -> None:
if not (context.root / "usr/bin/apt").exists():
return
from mkosi.context import Context
from mkosi.distributions import Distribution, debian
-from mkosi.installer.apt import Apt
+from mkosi.installer.apt import AptRepository
from mkosi.util import listify
@staticmethod
@listify
- def repositories(context: Context, local: bool = True) -> Iterable[Apt.Repository]:
+ def repositories(context: Context, local: bool = True) -> Iterable[AptRepository]:
types = ("deb", "deb-src")
# From kinetic onwards, the usr-is-merged package is available in universe and is required by
components = (*components, *context.config.repositories)
if context.config.local_mirror and local:
- yield Apt.Repository(
+ yield AptRepository(
types=("deb",),
url=context.config.local_mirror,
suite=context.config.release,
signedby = Path("/usr/share/keyrings/ubuntu-archive-keyring.gpg")
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=mirror,
suite=context.config.release,
signedby=signedby,
)
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=mirror,
suite=f"{context.config.release}-updates",
else:
mirror = "http://ports.ubuntu.com/"
- yield Apt.Repository(
+ yield AptRepository(
types=types,
url=mirror,
suite=f"{context.config.release}-security",
# SPDX-License-Identifier: LGPL-2.1+
+
+import dataclasses
import os
import textwrap
from collections.abc import Iterable, Sequence
from pathlib import Path
-from typing import NamedTuple, Optional
+from typing import Optional
from mkosi.config import Config, ConfigFeature
from mkosi.context import Context
from mkosi.util import umask
-class Apt(PackageManager):
- class Repository(NamedTuple):
- types: tuple[str, ...]
- url: str
- suite: str
- components: tuple[str, ...]
- signedby: Optional[Path]
-
- def __str__(self) -> str:
- return textwrap.dedent(
- f"""\
- Types: {" ".join(self.types)}
- URIs: {self.url}
- Suites: {self.suite}
- Components: {" ".join(self.components)}
- {"Signed-By" if self.signedby else "Trusted"}: {self.signedby or "yes"}
+@dataclasses.dataclass(frozen=True)
+class AptRepository:
+ types: tuple[str, ...]
+ url: str
+ suite: str
+ components: tuple[str, ...]
+ signedby: Optional[Path]
- """
- )
+ def __str__(self) -> str:
+ return textwrap.dedent(
+ f"""\
+ Types: {" ".join(self.types)}
+ URIs: {self.url}
+ Suites: {self.suite}
+ Components: {" ".join(self.components)}
+ {"Signed-By" if self.signedby else "Trusted"}: {self.signedby or "yes"}
+ """
+ )
+
+
+class Apt(PackageManager):
@classmethod
def executable(cls, config: Config) -> str:
return "apt"
}
@classmethod
- def setup(cls, context: Context, repos: Iterable[Repository]) -> None:
+ def setup(cls, context: Context, repos: Iterable[AptRepository]) -> None:
(context.pkgmngr / "etc/apt").mkdir(exist_ok=True, parents=True)
(context.pkgmngr / "etc/apt/apt.conf.d").mkdir(exist_ok=True, parents=True)
(context.pkgmngr / "etc/apt/preferences.d").mkdir(exist_ok=True, parents=True)