]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Make package manager invoke() methods return the result
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 15 Feb 2024 09:43:48 +0000 (10:43 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 15 Feb 2024 18:57:56 +0000 (19:57 +0100)
We also move the rpm database fixup call to the install() method
of the distribution so we don't try to do it every time we invoke
the package manager as it only needs to be done once.

mkosi/distributions/centos.py
mkosi/distributions/fedora.py
mkosi/distributions/opensuse.py
mkosi/installer/apt.py
mkosi/installer/dnf.py
mkosi/installer/pacman.py
mkosi/installer/zypper.py

index cc42df6876661564e50dfd2aa0a096780726334f..62e5db76154ef2af13db1abf0878b64eb7ee6ab6 100644 (file)
@@ -14,7 +14,7 @@ from mkosi.distributions import (
 )
 from mkosi.installer import PackageManager
 from mkosi.installer.dnf import Dnf
-from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, fixup_rpmdb_location
 from mkosi.log import complete_step, die
 from mkosi.tree import rmtree
 from mkosi.util import listify
@@ -84,6 +84,7 @@ class Installer(DistributionInstaller):
     def install(cls, context: Context) -> None:
         # Make sure glibc-minimal-langpack is installed instead of glibc-all-langpacks.
         cls.install_packages(context, ["filesystem", "glibc-minimal-langpack"], apivfs=False)
+        fixup_rpmdb_location(context)
 
         # On Fedora, the default rpmdb has moved to /usr/lib/sysimage/rpm so if that's the case we
         # need to move it back to /var/lib/rpm on CentOS.
index 27eab68e5c0450e86129cea640f6d763d5e42df7..6bf1fe8b3a14f61c3e314225daae887bd2d232d5 100644 (file)
@@ -12,7 +12,7 @@ from mkosi.distributions import (
 )
 from mkosi.installer import PackageManager
 from mkosi.installer.dnf import Dnf
-from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, fixup_rpmdb_location
 from mkosi.log import die
 from mkosi.util import listify
 
@@ -61,6 +61,7 @@ class Installer(DistributionInstaller):
     @classmethod
     def install(cls, context: Context) -> None:
         cls.install_packages(context, ["filesystem"], apivfs=False)
+        fixup_rpmdb_location(context)
 
     @classmethod
     def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
index 230c7e49f6a910e6cf21c5e39bc1644e280dbcfe..d46961c2da2f6288b1b1e1aaf95a4963e3eaba55 100644 (file)
@@ -10,7 +10,7 @@ from mkosi.context import Context
 from mkosi.distributions import Distribution, DistributionInstaller, PackageType
 from mkosi.installer import PackageManager
 from mkosi.installer.dnf import Dnf
-from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, fixup_rpmdb_location
 from mkosi.installer.zypper import Zypper
 from mkosi.log import die
 from mkosi.run import find_binary, run
@@ -75,6 +75,7 @@ class Installer(DistributionInstaller):
     @classmethod
     def install(cls, context: Context) -> None:
         cls.install_packages(context, ["filesystem", "distribution-release"], apivfs=False)
+        fixup_rpmdb_location(context)
 
     @classmethod
     def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None:
index feb9a24e05ac5953ed8b2ca4b2ffabffd05b274d..9d78a1ef0b6ad89ead90e6f1d08c778fc771a5f6 100644 (file)
@@ -11,7 +11,7 @@ from mkosi.log import die
 from mkosi.mounts import finalize_ephemeral_source_mounts
 from mkosi.run import find_binary, run
 from mkosi.sandbox import apivfs_cmd
-from mkosi.types import PathString
+from mkosi.types import CompletedProcess, PathString
 from mkosi.util import sort_packages, umask
 
 
@@ -172,9 +172,9 @@ class Apt(PackageManager):
         options: Sequence[str] = (),
         apivfs: bool = True,
         mounts: Sequence[PathString] = (),
-    ) -> None:
+    ) -> CompletedProcess:
         with finalize_ephemeral_source_mounts(context.config) as sources:
-            run(
+            return run(
                 cls.cmd(context, "apt-get") + [operation, *options, *sort_packages(packages)],
                 sandbox=(
                     context.sandbox(
index 9058111aaa60d1092957540d70548ea1059db8fd..0acff3dd14acc3ddd8afbe7eafa67ed542b22790 100644 (file)
@@ -6,12 +6,12 @@ from pathlib import Path
 from mkosi.config import Cacheonly, Config
 from mkosi.context import Context
 from mkosi.installer import PackageManager
-from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, rpm_cmd, setup_rpm
+from mkosi.installer.rpm import RpmRepository, rpm_cmd, setup_rpm
 from mkosi.log import ARG_DEBUG
 from mkosi.mounts import finalize_ephemeral_source_mounts
 from mkosi.run import find_binary, run
 from mkosi.sandbox import apivfs_cmd
-from mkosi.types import PathString
+from mkosi.types import CompletedProcess, PathString
 from mkosi.util import sort_packages
 
 
@@ -158,32 +158,31 @@ class Dnf(PackageManager):
         packages: Iterable[str] = (),
         options: Sequence[str] = (),
         apivfs: bool = True,
-    ) -> None:
-        with finalize_ephemeral_source_mounts(context.config) as sources:
-            run(
-                cls.cmd(context) + [operation, *options, *sort_packages(packages)],
-                sandbox=(
-                    context.sandbox(
-                        network=True,
-                        options=[
-                            "--bind", context.root, context.root,
-                            *cls.mounts(context),
-                            *sources,
-                            "--chdir", "/work/src",
-                        ],
-                    ) + (apivfs_cmd(context.root) if apivfs else [])
-                ),
-                env=context.config.environment,
-            )
-
-        fixup_rpmdb_location(context)
-
-        # 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.
-        if (context.root / "var/log").exists():
-            for p in (context.root / "var/log").iterdir():
-                if any(p.name.startswith(prefix) for prefix in ("dnf", "hawkey", "yum")):
-                    p.unlink()
+    ) -> CompletedProcess:
+        try:
+            with finalize_ephemeral_source_mounts(context.config) as sources:
+                return run(
+                    cls.cmd(context) + [operation, *options, *sort_packages(packages)],
+                    sandbox=(
+                        context.sandbox(
+                            network=True,
+                            options=[
+                                "--bind", context.root, context.root,
+                                *cls.mounts(context),
+                                *sources,
+                                "--chdir", "/work/src",
+                            ],
+                        ) + (apivfs_cmd(context.root) if apivfs else [])
+                    ),
+                    env=context.config.environment,
+                )
+        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.
+            if (context.root / "var/log").exists():
+                for p in (context.root / "var/log").iterdir():
+                    if any(p.name.startswith(prefix) for prefix in ("dnf", "hawkey", "yum")):
+                        p.unlink()
 
     @classmethod
     def sync(cls, context: Context, options: Sequence[str] = ()) -> None:
index dbdad5d95c679818a4ca57f0900321039a160e0a..6fe0d1cce2623bddf596f821f0dc3c423e751c26 100644 (file)
@@ -11,7 +11,7 @@ from mkosi.installer import PackageManager
 from mkosi.mounts import finalize_ephemeral_source_mounts
 from mkosi.run import run
 from mkosi.sandbox import apivfs_cmd
-from mkosi.types import PathString
+from mkosi.types import CompletedProcess, PathString
 from mkosi.util import sort_packages, umask
 from mkosi.versioncomp import GenericVersion
 
@@ -148,9 +148,9 @@ class Pacman(PackageManager):
         options: Sequence[str] = (),
         packages: Sequence[str] = (),
         apivfs: bool = True,
-    ) -> None:
+    ) -> CompletedProcess:
         with finalize_ephemeral_source_mounts(context.config) as sources:
-            run(
+            return run(
                 cls.cmd(context) + [operation, *options, *sort_packages(packages)],
                 sandbox=(
                     context.sandbox(
index f6328663730d3c3ab966e74a93d6f901a3b4443c..afedee5a1678716b1345c7e56bbbfdc0f37f3516 100644 (file)
@@ -7,11 +7,11 @@ from pathlib import Path
 from mkosi.config import Config, yes_no
 from mkosi.context import Context
 from mkosi.installer import PackageManager
-from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, rpm_cmd, setup_rpm
+from mkosi.installer.rpm import RpmRepository, rpm_cmd, setup_rpm
 from mkosi.mounts import finalize_ephemeral_source_mounts
 from mkosi.run import run
 from mkosi.sandbox import apivfs_cmd
-from mkosi.types import PathString
+from mkosi.types import CompletedProcess, PathString
 from mkosi.util import sort_packages
 
 
@@ -119,9 +119,9 @@ class Zypper(PackageManager):
         *,
         options: Sequence[str] = (),
         apivfs: bool = True,
-    ) -> None:
+    ) -> CompletedProcess:
         with finalize_ephemeral_source_mounts(context.config) as sources:
-            run(
+            return run(
                 cls.cmd(context) + [operation, *options, *sort_packages(packages)],
                 sandbox=(
                     context.sandbox(
@@ -137,8 +137,6 @@ class Zypper(PackageManager):
                 env=context.config.environment,
             )
 
-        fixup_rpmdb_location(context)
-
     @classmethod
     def sync(cls, context: Context) -> None:
         cls.invoke(context, "refresh", apivfs=False)