]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
centos: Handle major/minor releases in derivatives properly 3580/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 4 Mar 2025 08:21:25 +0000 (09:21 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 4 Mar 2025 10:03:10 +0000 (11:03 +0100)
While centos doesn't have major/minor releases, rocky, alma and rhel
do, so let's make sure we handle those cases properly.

Additionally, we also fix EPEL to use the proper major/minor release
when we're doing EPEL 10, as since EPEL 10 there's major/minor releases
for EPEL as well.

mkosi/distributions/alma.py
mkosi/distributions/centos.py
mkosi/distributions/rhel.py
mkosi/distributions/rhel_ubi.py
mkosi/distributions/rocky.py

index 16345ebb7f71bb2045ca2627f9f56b3e0e273c92..2532b5c2518ef2034bed4f547dc40f6945670edb 100644 (file)
@@ -10,13 +10,14 @@ class Installer(centos.Installer):
     def pretty_name(cls) -> str:
         return "AlmaLinux"
 
-    @staticmethod
-    def gpgurls(context: Context) -> tuple[str, ...]:
+    @classmethod
+    def gpgurls(cls, context: Context) -> tuple[str, ...]:
+        major = cls.major_release(context.config)
         return (
             find_rpm_gpgkey(
                 context,
-                f"RPM-GPG-KEY-AlmaLinux-{context.config.release}",
-                f"https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-{context.config.release}",
+                f"RPM-GPG-KEY-AlmaLinux-{major}",
+                f"https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-{major}",
             ),
         )
 
index 3d4e54eb2a3d4fd73eb46f73bb31834511ca33e4..c57b8945c04eb0473271b224a8cf356933af50e8 100644 (file)
@@ -40,6 +40,10 @@ class Installer(DistributionInstaller):
     def default_tools_tree_distribution(cls) -> Distribution:
         return Distribution.fedora
 
+    @classmethod
+    def major_release(cls, config: "Config") -> str:
+        return config.release.partition(".")[0]
+
     @classmethod
     def package_manager(cls, config: "Config") -> type[PackageManager]:
         return Dnf
@@ -68,7 +72,9 @@ class Installer(DistributionInstaller):
         setup_rpm(context, dbpath=cls.dbpath(context))
 
         Dnf.setup(context, list(cls.repositories(context)))
-        (context.sandbox_tree / "etc/dnf/vars/stream").write_text(f"{context.config.release}-stream\n")
+        (context.sandbox_tree / "etc/dnf/vars/stream").write_text(
+            f"{cls.major_release(context.config)}-stream\n"
+        )
 
     @classmethod
     def install(cls, context: Context) -> None:
@@ -96,11 +102,11 @@ class Installer(DistributionInstaller):
 
         return a
 
-    @staticmethod
-    def gpgurls(context: Context) -> tuple[str, ...]:
+    @classmethod
+    def gpgurls(cls, context: Context) -> tuple[str, ...]:
         # First, start with the names of the appropriate keys in /etc/pki/rpm-gpg.
 
-        if context.config.release == "9":
+        if GenericVersion(context.config.release) == 9:
             rel = "RPM-GPG-KEY-centosofficial"
         else:
             rel = "RPM-GPG-KEY-centosofficial-SHA256"
@@ -109,7 +115,7 @@ class Installer(DistributionInstaller):
 
         # Next, follow up with the names of the appropriate keys in /usr/share/distribution-gpg-keys.
 
-        if context.config.release == "9":
+        if GenericVersion(context.config.release) == 9:
             rel = "RPM-GPG-KEY-CentOS-Official"
         else:
             rel = "RPM-GPG-KEY-CentOS-Official-SHA256"
@@ -215,11 +221,17 @@ class Installer(DistributionInstaller):
 
     @classmethod
     def epel_repositories(cls, context: Context) -> Iterable[RpmRepository]:
+        # Since EPEL 10, there's an associated minor release for every RHEL minor release.
+        if GenericVersion(context.config.release) >= 10:
+            release = context.config.release
+        else:
+            release = cls.major_release(context.config)
+
         gpgurls = (
             find_rpm_gpgkey(
                 context,
-                f"RPM-GPG-KEY-EPEL-{context.config.release}",
-                f"https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-{context.config.release}",
+                f"RPM-GPG-KEY-EPEL-{cls.major_release(context.config)}",
+                f"https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-{cls.major_release(context.config)}",
             ),
         )
 
@@ -232,7 +244,7 @@ class Installer(DistributionInstaller):
                 ("epel", "epel"),
                 ("epel-testing", "epel/testing"),
             ]
-            if int(context.config.release) < 10:
+            if GenericVersion(context.config.release) < 10:
                 repodirs += [
                     ("epel-next", "epel/next"),
                     ("epel-next-testing", "epel/testing/next"),
@@ -247,19 +259,19 @@ class Installer(DistributionInstaller):
                 )
                 yield RpmRepository(
                     repo,
-                    f"baseurl={url}/{dir}/$releasever/Everything/$basearch",
+                    f"baseurl={url}/{dir}/{release}/Everything/$basearch",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     f"{repo}-debuginfo",
-                    f"baseurl={url}/{dir}/$releasever/Everything/$basearch/debug",
+                    f"baseurl={url}/{dir}/{release}/Everything/$basearch/debug",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     f"{repo}-source",
-                    f"baseurl={url}/{dir}/$releasever/Everything/source/tree",
+                    f"baseurl={url}/{dir}/{release}/Everything/source/tree",
                     gpgurls,
                     enabled=False,
                 )
@@ -268,65 +280,65 @@ class Installer(DistributionInstaller):
 
             # epel-next does not exist anymore since EPEL 10.
             repos = ["epel"]
-            if int(context.config.release) < 10:
+            if GenericVersion(context.config.release) < 10:
                 repos += ["epel-next"]
 
             for repo in repos:
                 yield RpmRepository(
                     repo,
-                    f"{url}&repo={repo}-$releasever",
+                    f"{url}&repo={repo}-{release}",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     f"{repo}-debuginfo",
-                    f"{url}&repo={repo}-debug-$releasever",
+                    f"{url}&repo={repo}-debug-{release}",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     f"{repo}-source",
-                    f"{url}&repo={repo}-source-$releasever",
+                    f"{url}&repo={repo}-source-{release}",
                     gpgurls,
                     enabled=False,
                 )
 
             yield RpmRepository(
                 "epel-testing",
-                f"{url}&repo=testing-epel$releasever",
+                f"{url}&repo=testing-epel{release}",
                 gpgurls,
                 enabled=False,
             )
             yield RpmRepository(
                 "epel-testing-debuginfo",
-                f"{url}&repo=testing-debug-epel$releasever",
+                f"{url}&repo=testing-debug-epel{release}",
                 gpgurls,
                 enabled=False,
             )
             yield RpmRepository(
                 "epel-testing-source",
-                f"{url}&repo=testing-source-epel$releasever",
+                f"{url}&repo=testing-source-epel{release}",
                 gpgurls,
                 enabled=False,
             )
 
             # epel-next does not exist anymore since EPEL 10.
-            if int(context.config.release) < 10:
+            if GenericVersion(context.config.release) < 10:
                 yield RpmRepository(
                     "epel-next-testing",
-                    f"{url}&repo=epel-testing-next-$releasever",
+                    f"{url}&repo=epel-testing-next-{release}",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     "epel-next-testing-debuginfo",
-                    f"{url}&repo=epel-testing-next-debug-$releasever",
+                    f"{url}&repo=epel-testing-next-debug-{release}",
                     gpgurls,
                     enabled=False,
                 )
                 yield RpmRepository(
                     "epel-next-testing-source",
-                    f"{url}&repo=epel-testing-next-source-$releasever",
+                    f"{url}&repo=epel-testing-next-source-{release}",
                     gpgurls,
                     enabled=False,
                 )
index 81e45892a0f96ca57a6bee2093e766c2d8bc1895..186fbba46f4639faa26d2e022a22ecc99fa66024 100644 (file)
@@ -15,14 +15,12 @@ class Installer(centos.Installer):
     def pretty_name(cls) -> str:
         return "RHEL"
 
-    @staticmethod
-    def gpgurls(context: Context) -> tuple[str, ...]:
-        major = int(float(context.config.release))
-
+    @classmethod
+    def gpgurls(cls, context: Context) -> tuple[str, ...]:
         return (
             find_rpm_gpgkey(
                 context,
-                f"RPM-GPG-KEY-redhat{major}-release",
+                f"RPM-GPG-KEY-redhat{cls.major_release(context.config)}-release",
                 "https://access.redhat.com/security/data/fd431d51.txt",
             ),
         )
@@ -87,7 +85,7 @@ class Installer(centos.Installer):
             )
 
             v = context.config.release
-            major = int(float(v))
+            major = cls.major_release(context.config)
             yield RpmRepository(
                 f"rhel-{v}-{repo}-rpms",
                 f"baseurl={join_mirror(mirror, f'rhel{major}/{v}/$basearch/{repo}/os')}",
index 34cbc72a6cd58dd3ec2cee9a71d2610a4167cd84..afb9701a6abe5de48f5070cd4ad90fcb97a5d79c 100644 (file)
@@ -12,14 +12,12 @@ class Installer(centos.Installer):
     def pretty_name(cls) -> str:
         return "RHEL UBI"
 
-    @staticmethod
-    def gpgurls(context: Context) -> tuple[str, ...]:
-        major = int(float(context.config.release))
-
+    @classmethod
+    def gpgurls(cls, context: Context) -> tuple[str, ...]:
         return (
             find_rpm_gpgkey(
                 context,
-                f"RPM-GPG-KEY-redhat{major}-release",
+                f"RPM-GPG-KEY-redhat{cls.major_release(context.config)}-release",
                 "https://access.redhat.com/security/data/fd431d51.txt",
             ),
         )
index 0a2cdfd080863cee2dfbcfc0f3b7a95e01aa3565..007644df496f7e57a843d57c61bb5d9b8f7b9593 100644 (file)
@@ -10,13 +10,14 @@ class Installer(centos.Installer):
     def pretty_name(cls) -> str:
         return "Rocky Linux"
 
-    @staticmethod
-    def gpgurls(context: Context) -> tuple[str, ...]:
+    @classmethod
+    def gpgurls(cls, context: Context) -> tuple[str, ...]:
+        major = cls.major_release(context.config)
         return (
             find_rpm_gpgkey(
                 context,
-                f"RPM-GPG-KEY-Rocky-{context.config.release}",
-                f"https://download.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-{context.config.release}",
+                f"RPM-GPG-KEY-Rocky-{major}",
+                f"https://download.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-{major}",
             ),
         )