import enum
import importlib
import re
+import urllib.parse
from collections.abc import Sequence
from typing import TYPE_CHECKING, Optional, cast
version_id = version_codename or extracted_codename
return d, version_id
+
+
+def join_mirror(mirror: str, link: str) -> str:
+ # urljoin() behaves weirdly if the base does not end with a / or the path starts with a / so fix them up as needed.
+ if not mirror.endswith("/"):
+ mirror = f"{mirror}/"
+ link = link.removeprefix("/")
+
+ return urllib.parse.urljoin(mirror, link)
# SPDX-License-Identifier: LGPL-2.1+
-from mkosi.distributions import centos
+from mkosi.distributions import centos, join_mirror
from mkosi.installer.dnf import Repo, find_rpm_gpgkey
from mkosi.state import MkosiState
@classmethod
def repository_variants(cls, state: MkosiState, repo: str) -> list[Repo]:
if state.config.mirror:
- url = f"baseurl={state.config.mirror}/almalinux/$releasever/{repo}/$basearch/os"
+ url = f"baseurl={join_mirror(state.config.mirror, f'almalinux/$releasever/{repo}/$basearch/os')}"
else:
url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/{repo.lower()}"
import os
import shutil
-import urllib.parse
from collections.abc import Iterable, Sequence
from pathlib import Path
from mkosi.architecture import Architecture
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import (
+ Distribution,
+ DistributionInstaller,
+ PackageType,
+ join_mirror,
+)
from mkosi.installer.dnf import Repo, find_rpm_gpgkey, invoke_dnf, setup_dnf
from mkosi.log import complete_step, die
from mkosi.state import MkosiState
newdb.symlink_to(os.path.relpath(olddb, start=newdb.parent))
-def join_mirror(mirror: str, link: str) -> str:
- return urllib.parse.urljoin(mirror, link)
-
class Installer(DistributionInstaller):
@classmethod
# SPDX-License-Identifier: LGPL-2.1+
-import urllib.parse
from collections.abc import Sequence
from mkosi.architecture import Architecture
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import (
+ Distribution,
+ DistributionInstaller,
+ PackageType,
+ join_mirror,
+)
from mkosi.installer.dnf import Repo, find_rpm_gpgkey, invoke_dnf, setup_dnf
from mkosi.log import die
from mkosi.state import MkosiState
elif state.config.release == "eln":
mirror = state.config.mirror or "https://odcs.fedoraproject.org/composes/production/latest-Fedora-ELN/compose"
for repo in ("Appstream", "BaseOS", "Extras", "CRB"):
- url = f"baseurl={urllib.parse.urljoin(mirror, repo)}"
+ url = f"baseurl={join_mirror(mirror, repo)}"
repos += [
Repo(repo.lower(), f"{url}/$basearch/os", gpgurls),
Repo(repo.lower(), f"{url}/$basearch/debug/tree", gpgurls, enabled=False),
]
elif state.config.mirror:
directory = "development" if state.config.release == "rawhide" else "releases"
- url = f"baseurl={urllib.parse.urljoin(state.config.mirror, f'{directory}/$releasever/Everything')}"
+ url = f"baseurl={join_mirror(state.config.mirror, f'{directory}/$releasever/Everything')}"
repos += [
Repo("fedora", f"{url}/$basearch/os", gpgurls),
Repo("fedora-debuginfo", f"{url}/$basearch/debug/tree", gpgurls, enabled=False),
]
if state.config.release != "rawhide":
- url = f"baseurl={urllib.parse.urljoin(state.config.mirror, 'updates/$releasever/Everything')}"
+ url = f"baseurl={join_mirror(state.config.mirror, 'updates/$releasever/Everything')}"
repos += [
Repo("updates", f"{url}/$basearch", gpgurls),
Repo("updates-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False),
Repo("updates-source", f"{url}/SRPMS", gpgurls, enabled=False),
]
- url = f"baseurl={urllib.parse.urljoin(state.config.mirror, 'updates/testing/$releasever/Everything')}"
+ url = f"baseurl={join_mirror(state.config.mirror, 'updates/testing/$releasever/Everything')}"
repos += [
Repo("updates-testing", f"{url}/$basearch", gpgurls, enabled=False),
Repo("updates-testing-debuginfo", f"{url}/$basearch/debug", gpgurls, enabled=False),
from mkosi.architecture import Architecture
from mkosi.archive import extract_tar
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import (
+ Distribution,
+ DistributionInstaller,
+ PackageType,
+ join_mirror,
+)
from mkosi.log import ARG_DEBUG, complete_step, die
from mkosi.run import apivfs_cmd, bwrap, chroot_cmd, run
from mkosi.state import MkosiState
mirror = state.config.mirror or "https://distfiles.gentoo.org"
# http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3.txt
- stage3tsf_path_url = urllib.parse.urljoin(
+ stage3tsf_path_url = join_mirror(
mirror.partition(" ")[0],
f"releases/{arch}/autobuilds/latest-stage3.txt",
)
else:
die("profile names changed upstream?")
- stage3_url = urllib.parse.urljoin(mirror, f"releases/{arch}/autobuilds/{stage3_latest}")
+ stage3_url = join_mirror(mirror, f"releases/{arch}/autobuilds/{stage3_latest}")
stage3_tar = state.cache_dir / "stage3.tar"
stage3 = state.cache_dir / "stage3"
# SPDX-License-Identifier: LGPL-2.1+
import shutil
-import urllib.parse
from collections.abc import Sequence
from mkosi.architecture import Architecture
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import (
+ Distribution,
+ DistributionInstaller,
+ PackageType,
+ join_mirror,
+)
from mkosi.installer.dnf import Repo, find_rpm_gpgkey, invoke_dnf, setup_dnf
from mkosi.log import die
from mkosi.state import MkosiState
if state.config.local_mirror:
repos += [Repo("core-release", f"baseurl={state.config.local_mirror}", gpgurls)]
elif state.config.mirror:
- url = f"baseurl={urllib.parse.urljoin(state.config.mirror, 'distrib/$releasever/$basearch/media/core/')}"
+ url = f"baseurl={join_mirror(state.config.mirror, 'distrib/$releasever/$basearch/media/core/')}"
repos += [
Repo("core-release", f"{url}/release", gpgurls),
Repo("core-updates", f"{url}/updates/", gpgurls)
# SPDX-License-Identifier: LGPL-2.1+
import shutil
-import urllib.parse
from collections.abc import Sequence
from mkosi.architecture import Architecture
-from mkosi.distributions import Distribution, DistributionInstaller, PackageType
+from mkosi.distributions import (
+ Distribution,
+ DistributionInstaller,
+ PackageType,
+ join_mirror,
+)
from mkosi.installer.dnf import Repo, find_rpm_gpgkey, invoke_dnf, setup_dnf
from mkosi.log import die
from mkosi.state import MkosiState
if state.config.local_mirror:
repos += [Repo("main-release", f"baseurl={state.config.local_mirror}", gpgurls)]
else:
- url = f"baseurl={urllib.parse.urljoin(mirror, '$releasever/repository/$basearch/main')}"
+ url = f"baseurl={join_mirror(mirror, '$releasever/repository/$basearch/main')}"
repos += [
Repo("main-release", f"{url}/release", gpgurls),
Repo("main-updates", f"{url}/updates", gpgurls),
from pathlib import Path
from typing import Any, Optional
-from mkosi.distributions import centos
+from mkosi.distributions import centos, join_mirror
from mkosi.installer.dnf import Repo, find_rpm_gpgkey
from mkosi.log import die
from mkosi.state import MkosiState
major = int(float(v))
yield Repo(
f"rhel-{v}-{repo}-rpms",
- f"baseurl={centos.join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/os')}",
+ f"baseurl={join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/os')}",
enabled=True,
**common,
)
yield Repo(
f"rhel-{v}-{repo}-debug-rpms",
- f"baseurl={centos.join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/debug')}",
+ f"baseurl={join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/debug')}",
enabled=False,
**common,
)
yield Repo(
f"rhel-{v}-{repo}-source",
- f"baseurl={centos.join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/source')}",
+ f"baseurl={join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/source')}",
enabled=False,
**common,
)
from collections.abc import Iterable
-from mkosi.distributions import centos
+from mkosi.distributions import centos, join_mirror
from mkosi.installer.dnf import Repo, find_rpm_gpgkey
from mkosi.state import MkosiState
v = state.config.release
yield Repo(
f"ubi-{v}-{repo}-rpms",
- f"baseurl={centos.join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/os')}",
+ f"baseurl={join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/os')}",
cls.gpgurls(state),
)
yield Repo(
f"ubi-{v}-{repo}-debug-rpms",
- f"baseurl={centos.join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/debug')}",
+ f"baseurl={join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/debug')}",
cls.gpgurls(state),
enabled=False,
)
yield Repo(
f"ubi-{v}-{repo}-source",
- f"baseurl={centos.join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/source')}",
+ f"baseurl={join_mirror(mirror, f'ubi{v}/{v}/$basearch/{repo}/source')}",
cls.gpgurls(state),
enabled=False,
)
# SPDX-License-Identifier: LGPL-2.1+
-from mkosi.distributions import centos
+from mkosi.distributions import centos, join_mirror
from mkosi.installer.dnf import Repo, find_rpm_gpgkey
from mkosi.state import MkosiState
@classmethod
def repository_variants(cls, state: MkosiState, repo: str) -> list[Repo]:
if state.config.mirror:
- url = f"baseurl={state.config.mirror}/rocky/$releasever/{repo}/$basearch/os"
+ url = f"baseurl={join_mirror(state.config.mirror, f'rocky/$releasever/{repo}/$basearch/os')}"
else:
url = f"mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo={repo}-$releasever"