# SPDX-License-Identifier: LGPL-2.1+
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from mkosi.config import Architecture
from mkosi.context import Context
@classmethod
def setup(cls, context: Context) -> None:
+ setup_pacman(context, cls.repositories(context))
+
+ @classmethod
+ def install(cls, context: Context) -> None:
+ cls.install_packages(context, ["filesystem"], apivfs=False)
+
+ @classmethod
+ def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
+ invoke_pacman(
+ context,
+ "--sync",
+ ["--refresh", "--needed", "--assume-installed", "initramfs"],
+ packages,
+ apivfs=apivfs,
+ )
+
+ @classmethod
+ def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
+ invoke_pacman(context, "--remove", ["--nosave", "--recursive"], packages)
+
+ @classmethod
+ def repositories(cls, context: Context) -> Iterable[PacmanRepository]:
if context.config.local_mirror:
- repos = [PacmanRepository("core", context.config.local_mirror)]
+ yield PacmanRepository("core", context.config.local_mirror)
else:
- repos = []
-
if context.config.architecture == Architecture.arm64:
url = f"{context.config.mirror or 'http://mirror.archlinuxarm.org'}/$arch/$repo"
else:
"extra-debug",
):
if id in context.config.repositories:
- repos += [PacmanRepository(id, url)]
+ yield PacmanRepository(id, url)
for id in ("core", "extra"):
- repos += [PacmanRepository(id, url)]
-
- setup_pacman(context, repos)
-
- @classmethod
- def install(cls, context: Context) -> None:
- cls.install_packages(context, ["filesystem"], apivfs=False)
-
- @classmethod
- def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
- invoke_pacman(
- context,
- "--sync",
- ["--refresh", "--needed", "--assume-installed", "initramfs"],
- packages,
- apivfs=apivfs,
- )
-
- @classmethod
- def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
- invoke_pacman(context, "--remove", ["--nosave", "--recursive"], packages)
+ yield PacmanRepository(id, url)
@classmethod
def architecture(cls, arch: Architecture) -> str:
# SPDX-License-Identifier: LGPL-2.1+
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from mkosi.config import Architecture
from mkosi.context import Context
@classmethod
def setup(cls, context: Context) -> None:
+ setup_dnf(context, cls.repositories(context))
+
+ @classmethod
+ def install(cls, context: Context) -> None:
+ cls.install_packages(context, ["filesystem"], apivfs=False)
+
+ @classmethod
+ def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
+ invoke_dnf(context, "install", packages, apivfs=apivfs)
+
+ @classmethod
+ def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
+ invoke_dnf(context, "remove", packages)
+
+ @classmethod
+ def repositories(cls, context: Context) -> Iterable[RpmRepository]:
gpgurls = (
find_rpm_gpgkey(
context,
),
)
- repos = []
-
if context.config.local_mirror:
- repos += [RpmRepository("fedora", f"baseurl={context.config.local_mirror}", gpgurls)]
+ yield RpmRepository("fedora", f"baseurl={context.config.local_mirror}", gpgurls)
elif context.config.release == "eln":
mirror = context.config.mirror or "https://odcs.fedoraproject.org/composes/production/latest-Fedora-ELN/compose"
for repo in ("Appstream", "BaseOS", "Extras", "CRB"):
url = f"baseurl={join_mirror(mirror, repo)}"
- repos += [
- RpmRepository(repo.lower(), f"{url}/$basearch/os", gpgurls),
- RpmRepository(repo.lower(), f"{url}/$basearch/debug/tree", gpgurls, enabled=False),
- RpmRepository(repo.lower(), f"{url}/source/tree", gpgurls, enabled=False),
- ]
+ yield RpmRepository(repo.lower(), f"{url}/$basearch/os", gpgurls)
+ yield RpmRepository(repo.lower(), f"{url}/$basearch/debug/tree", gpgurls, enabled=False)
+ yield RpmRepository(repo.lower(), f"{url}/source/tree", gpgurls, enabled=False)
elif (m := context.config.mirror):
directory = "development" if context.config.release == "rawhide" else "releases"
url = f"baseurl={join_mirror(m, f'fedora/linux/{directory}/$releasever/Everything')}"
- repos += [
- RpmRepository("fedora", f"{url}/$basearch/os", gpgurls),
- RpmRepository("fedora-debuginfo", f"{url}/$basearch/debug/tree", gpgurls, enabled=False),
- RpmRepository("fedora-source", f"{url}/source/tree", gpgurls, enabled=False),
- ]
+ yield RpmRepository("fedora", f"{url}/$basearch/os", gpgurls)
+ yield RpmRepository("fedora-debuginfo", f"{url}/$basearch/debug/tree", gpgurls, enabled=False)
+ yield RpmRepository("fedora-source", f"{url}/source/tree", gpgurls, enabled=False)
if context.config.release != "rawhide":
url = f"baseurl={join_mirror(m, 'fedora/linux/updates/$releasever/Everything')}"
- repos += [
- RpmRepository("updates", f"{url}/$basearch", gpgurls),
- RpmRepository("updates-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False),
- RpmRepository("updates-source", f"{url}/source/tree", gpgurls, enabled=False),
- ]
+ yield RpmRepository("updates", f"{url}/$basearch", gpgurls)
+ yield RpmRepository("updates-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False)
+ yield RpmRepository("updates-source", f"{url}/source/tree", gpgurls, enabled=False)
url = f"baseurl={join_mirror(m, 'fedora/linux/updates/testing/$releasever/Everything')}"
- repos += [
- RpmRepository("updates-testing", f"{url}/$basearch", gpgurls, enabled=False),
- RpmRepository("updates-testing-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False),
- RpmRepository("updates-testing-source", f"{url}/source/tree", gpgurls, enabled=False)
- ]
+ yield RpmRepository("updates-testing", f"{url}/$basearch", gpgurls, enabled=False)
+ yield RpmRepository("updates-testing-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False)
+ yield RpmRepository("updates-testing-source", f"{url}/source/tree", gpgurls, enabled=False)
else:
url = "metalink=https://mirrors.fedoraproject.org/metalink?arch=$basearch"
- repos += [
- RpmRepository("fedora", f"{url}&repo=fedora-$releasever", gpgurls),
- RpmRepository("fedora-debuginfo", f"{url}&repo=fedora-debug-$releasever", gpgurls, enabled=False),
- RpmRepository("fedora-source", f"{url}&repo=fedora-source-$releasever", gpgurls, enabled=False),
- ]
+ yield RpmRepository("fedora", f"{url}&repo=fedora-$releasever", gpgurls)
+ yield RpmRepository("fedora-debuginfo", f"{url}&repo=fedora-debug-$releasever", gpgurls, enabled=False)
+ yield RpmRepository("fedora-source", f"{url}&repo=fedora-source-$releasever", gpgurls, enabled=False)
if context.config.release != "rawhide":
- repos += [
- RpmRepository("updates", f"{url}&repo=updates-released-f$releasever", gpgurls),
- RpmRepository(
- "updates-debuginfo",
- f"{url}&repo=updates-released-debug-f$releasever",
- gpgurls,
- enabled=False,
- ),
- RpmRepository(
- "updates-source",
- f"{url}&repo=updates-released-source-f$releasever",
- gpgurls,
- enabled=False
- ),
- RpmRepository(
- "updates-testing",
- f"{url}&repo=updates-testing-f$releasever",
- gpgurls,
- enabled=False
- ),
- RpmRepository(
- "updates-testing-debuginfo",
- f"{url}&repo=updates-testing-debug-f$releasever",
- gpgurls,
- enabled=False,
- ),
- RpmRepository(
- "updates-testing-source",
- f"{url}&repo=updates-testing-source-f$releasever",
- gpgurls,
- enabled=False,
- ),
- ]
-
- setup_dnf(context, repos)
-
- @classmethod
- def install(cls, context: Context) -> None:
- cls.install_packages(context, ["filesystem"], apivfs=False)
-
- @classmethod
- def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
- invoke_dnf(context, "install", packages, apivfs=apivfs)
-
- @classmethod
- def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
- invoke_dnf(context, "remove", packages)
+ yield RpmRepository("updates", f"{url}&repo=updates-released-f$releasever", gpgurls)
+ yield RpmRepository(
+ "updates-debuginfo",
+ f"{url}&repo=updates-released-debug-f$releasever",
+ gpgurls,
+ enabled=False,
+ )
+ yield RpmRepository(
+ "updates-source",
+ f"{url}&repo=updates-released-source-f$releasever",
+ gpgurls,
+ enabled=False
+ )
+ yield RpmRepository(
+ "updates-testing",
+ f"{url}&repo=updates-testing-f$releasever",
+ gpgurls,
+ enabled=False
+ )
+ yield RpmRepository(
+ "updates-testing-debuginfo",
+ f"{url}&repo=updates-testing-debug-f$releasever",
+ gpgurls,
+ enabled=False,
+ )
+ yield RpmRepository(
+ "updates-testing-source",
+ f"{url}&repo=updates-testing-source-f$releasever",
+ gpgurls,
+ enabled=False,
+ )
@classmethod
def architecture(cls, arch: Architecture) -> str:
# SPDX-License-Identifier: LGPL-2.1+
import shutil
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from mkosi.config import Architecture
from mkosi.context import Context
@classmethod
def setup(cls, context: Context) -> None:
- gpgurls = (
- find_rpm_gpgkey(
- context,
- "RPM-GPG-KEY-Mageia",
- "https://mirrors.kernel.org/mageia/distrib/$releasever/$basearch/media/core/release/media_info/pubkey",
- ),
- )
-
- repos = []
-
- if context.config.local_mirror:
- repos += [RpmRepository("core-release", f"baseurl={context.config.local_mirror}", gpgurls)]
- elif context.config.mirror:
- url = f"baseurl={join_mirror(context.config.mirror, 'distrib/$releasever/$basearch/media/core/')}"
- repos += [
- RpmRepository("core-release", f"{url}/release", gpgurls),
- RpmRepository("core-updates", f"{url}/updates/", gpgurls)
- ]
- else:
- url = "mirrorlist=https://www.mageia.org/mirrorlist/?release=$releasever&arch=$basearch§ion=core"
- repos += [
- RpmRepository("core-release", f"{url}&repo=release", gpgurls),
- RpmRepository("core-updates", f"{url}&repo=updates", gpgurls)
- ]
-
- setup_dnf(context, repos)
+ setup_dnf(context, cls.repositories(context))
@classmethod
def install(cls, context: Context) -> None:
def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
invoke_dnf(context, "remove", packages)
+ @classmethod
+ def repositories(cls, context: Context) -> Iterable[RpmRepository]:
+ gpgurls = (
+ find_rpm_gpgkey(
+ context,
+ "RPM-GPG-KEY-Mageia",
+ "https://mirrors.kernel.org/mageia/distrib/$releasever/$basearch/media/core/release/media_info/pubkey",
+ ),
+ )
+
+ if context.config.local_mirror:
+ yield RpmRepository("core-release", f"baseurl={context.config.local_mirror}", gpgurls)
+ elif context.config.mirror:
+ url = f"baseurl={join_mirror(context.config.mirror, 'distrib/$releasever/$basearch/media/core/')}"
+ yield RpmRepository("core-release", f"{url}/release", gpgurls)
+ yield RpmRepository("core-updates", f"{url}/updates/", gpgurls)
+ else:
+ url = "mirrorlist=https://www.mageia.org/mirrorlist/?release=$releasever&arch=$basearch§ion=core"
+ yield RpmRepository("core-release", f"{url}&repo=release", gpgurls)
+ yield RpmRepository("core-updates", f"{url}&repo=updates", gpgurls)
+
@classmethod
def architecture(cls, arch: Architecture) -> str:
a = {
# SPDX-License-Identifier: LGPL-2.1+
import shutil
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from mkosi.config import Architecture
from mkosi.context import Context
@classmethod
def setup(cls, context: Context) -> None:
- mirror = context.config.mirror or "http://mirror.openmandriva.org"
-
- gpgurls = (
- find_rpm_gpgkey(
- context,
- "RPM-GPG-KEY-OpenMandriva",
- "https://raw.githubusercontent.com/OpenMandrivaAssociation/openmandriva-repos/master/RPM-GPG-KEY-OpenMandriva",
- ),
- )
-
- repos = []
-
- if context.config.local_mirror:
- repos += [RpmRepository("main-release", f"baseurl={context.config.local_mirror}", gpgurls)]
- else:
- url = f"baseurl={join_mirror(mirror, '$releasever/repository/$basearch/main')}"
- repos += [
- RpmRepository("main-release", f"{url}/release", gpgurls),
- RpmRepository("main-updates", f"{url}/updates", gpgurls),
- ]
-
- setup_dnf(context, repos)
+ setup_dnf(context, cls.repositories(context))
@classmethod
def install(cls, context: Context) -> None:
def remove_packages(cls, context: Context, packages: Sequence[str]) -> None:
invoke_dnf(context, "remove", packages)
+ @classmethod
+ def repositories(cls, context: Context) -> Iterable[RpmRepository]:
+ mirror = context.config.mirror or "http://mirror.openmandriva.org"
+
+ gpgurls = (
+ find_rpm_gpgkey(
+ context,
+ "RPM-GPG-KEY-OpenMandriva",
+ "https://raw.githubusercontent.com/OpenMandrivaAssociation/openmandriva-repos/master/RPM-GPG-KEY-OpenMandriva",
+ ),
+ )
+
+ if context.config.local_mirror:
+ yield RpmRepository("main-release", f"baseurl={context.config.local_mirror}", gpgurls)
+ else:
+ url = f"baseurl={join_mirror(mirror, '$releasever/repository/$basearch/main')}"
+ yield RpmRepository("main-release", f"{url}/release", gpgurls)
+ yield RpmRepository("main-updates", f"{url}/updates", gpgurls)
+
@classmethod
def architecture(cls, arch: Architecture) -> str:
a = {
import tempfile
import xml.etree.ElementTree as ElementTree
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from pathlib import Path
from mkosi.config import Architecture
@classmethod
def setup(cls, context: Context) -> None:
- release = context.config.release
- if release == "leap":
- release = "stable"
-
- mirror = context.config.mirror or "https://download.opensuse.org"
-
- # If the release looks like a timestamp, it's Tumbleweed. 13.x is legacy
- # (14.x won't ever appear). For anything else, let's default to Leap.
- if context.config.local_mirror:
- release_url = f"{context.config.local_mirror}"
- updates_url = None
- if release.isdigit() or release == "tumbleweed":
- release_url = f"{mirror}/tumbleweed/repo/oss/"
- updates_url = f"{mirror}/update/tumbleweed/"
- elif release in ("current", "stable"):
- release_url = f"{mirror}/distribution/openSUSE-{release}/repo/oss/"
- updates_url = f"{mirror}/update/openSUSE-{release}/"
- else:
- release_url = f"{mirror}/distribution/leap/{release}/repo/oss/"
- updates_url = f"{mirror}/update/leap/{release}/oss/"
-
zypper = find_binary("zypper", root=context.config.tools())
-
- # If we need to use a local mirror, create a temporary repository definition
- # that doesn't get in the image, as it is valid only at image build time.
- if context.config.local_mirror:
- repos = [RpmRepository(id="local-mirror", url=f"baseurl={context.config.local_mirror}", gpgurls=())]
- else:
- repos = [
- RpmRepository(
- id="repo-oss",
- url=f"baseurl={release_url}",
- gpgurls=fetch_gpgurls(context, release_url) if not zypper else (),
- ),
- ]
- if updates_url is not None:
- repos += [
- RpmRepository(
- id="repo-update",
- url=f"baseurl={updates_url}",
- gpgurls=fetch_gpgurls(context, updates_url) if not zypper else (),
- )
- ]
-
if zypper:
- setup_zypper(context, repos)
+ setup_zypper(context, cls.repositories(context))
else:
- setup_dnf(context, repos)
+ setup_dnf(context, cls.repositories(context))
@classmethod
def install(cls, context: Context) -> None:
else:
invoke_dnf(context, "remove", packages)
+ @classmethod
+ def repositories(cls, context: Context) -> Iterable[RpmRepository]:
+ zypper = find_binary("zypper", root=context.config.tools())
+
+ release = context.config.release
+ if release == "leap":
+ release = "stable"
+
+ mirror = context.config.mirror or "https://download.opensuse.org"
+
+ # If the release looks like a timestamp, it's Tumbleweed. 13.x is legacy
+ # (14.x won't ever appear). For anything else, let's default to Leap.
+ if context.config.local_mirror:
+ release_url = f"{context.config.local_mirror}"
+ updates_url = None
+ if release.isdigit() or release == "tumbleweed":
+ release_url = f"{mirror}/tumbleweed/repo/oss/"
+ updates_url = f"{mirror}/update/tumbleweed/"
+ elif release in ("current", "stable"):
+ release_url = f"{mirror}/distribution/openSUSE-{release}/repo/oss/"
+ updates_url = f"{mirror}/update/openSUSE-{release}/"
+ else:
+ release_url = f"{mirror}/distribution/leap/{release}/repo/oss/"
+ updates_url = f"{mirror}/update/leap/{release}/oss/"
+
+ if context.config.local_mirror:
+ yield RpmRepository(id="local-mirror", url=f"baseurl={context.config.local_mirror}", gpgurls=())
+ else:
+ yield RpmRepository(
+ id="repo-oss",
+ url=f"baseurl={release_url}",
+ gpgurls=fetch_gpgurls(context, release_url) if not zypper else (),
+ )
+ if updates_url is not None:
+ yield RpmRepository(
+ id="repo-update",
+ url=f"baseurl={updates_url}",
+ gpgurls=fetch_gpgurls(context, updates_url) if not zypper else (),
+ )
+
@classmethod
def architecture(cls, arch: Architecture) -> str:
a = {
# SPDX-License-Identifier: LGPL-2.1+
import textwrap
-from collections.abc import Sequence
+from collections.abc import Iterable, Sequence
from mkosi.config import yes_no
from mkosi.context import Context
from mkosi.util import sort_packages
-def setup_zypper(context: Context, repos: Sequence[RpmRepository]) -> None:
+def setup_zypper(context: Context, repos: Iterable[RpmRepository]) -> None:
config = context.pkgmngr / "etc/zypp/zypp.conf"
config.parent.mkdir(exist_ok=True, parents=True)