]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Introduce zypper.py for zypper related logic
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 28 Jul 2023 09:19:45 +0000 (11:19 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 31 Jul 2023 08:50:12 +0000 (10:50 +0200)
mkosi/distributions/opensuse.py
mkosi/installer/zypper.py [new file with mode: 0644]

index 43d149e3a863b2844381ed0658f46594052b94c6..785a3fa5072819e947039e66c4c7f08be32a9404 100644 (file)
@@ -1,16 +1,15 @@
 # SPDX-License-Identifier: LGPL-2.1+
 
 import shutil
-import textwrap
 import urllib.request
 import xml.etree.ElementTree as ElementTree
 from collections.abc import Sequence
 
 from mkosi.architecture import Architecture
 from mkosi.distributions import DistributionInstaller
-from mkosi.installer.dnf import Repo, fixup_rpmdb_location, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import Repo, invoke_dnf, setup_dnf
+from mkosi.installer.zypper import invoke_zypper, setup_zypper
 from mkosi.log import die
-from mkosi.run import bwrap
 from mkosi.state import MkosiState
 
 
@@ -81,71 +80,6 @@ class OpensuseInstaller(DistributionInstaller):
         return a
 
 
-def setup_zypper(state: MkosiState, repos: Sequence[Repo]) -> None:
-    config = state.pkgmngr / "etc/zypp/zypp.conf"
-    if not config.exists():
-        config.parent.mkdir(exist_ok=True, parents=True)
-        with config.open("w") as f:
-            f.write(
-                textwrap.dedent(
-                    f"""\
-                    [main]
-                    rpm.install.excludedocs = {"no" if state.config.with_docs else "yes"}
-                    solver.onlyRequires = yes
-                    """
-                )
-            )
-
-    repofile = state.pkgmngr / "etc/zypp/repos.d/mkosi.repo"
-    if not repofile.exists():
-        repofile.parent.mkdir(exist_ok=True, parents=True)
-        with repofile.open("w") as f:
-            for repo in repos:
-                f.write(
-                    textwrap.dedent(
-                        f"""\
-                        [{repo.id}]
-                        name={repo.id}
-                        {repo.url}
-                        gpgcheck=1
-                        enabled={int(repo.enabled)}
-                        autorefresh=0
-                        keeppackages=1
-                        """
-                    )
-                )
-
-                for i, url in enumerate(repo.gpgurls):
-                    f.write("gpgkey=" if i == 0 else len("gpgkey=") * " ")
-                    f.write(f"{url}\n")
-
-
-def invoke_zypper(
-    state: MkosiState,
-    verb: str,
-    packages: Sequence[str],
-    options: Sequence[str] = (),
-    apivfs: bool = True,
-) -> None:
-    cmdline = [
-        "zypper",
-        f"--root={state.root}",
-        f"--cache-dir={state.cache_dir}",
-        f"--reposd-dir={state.pkgmngr / 'etc/zypp/repos.d'}",
-        "--gpg-auto-import-keys" if state.config.repository_key_check else "--no-gpg-checks",
-        "--non-interactive",
-        verb,
-        *options,
-        *packages,
-    ]
-
-    bwrap(cmdline,
-          apivfs=state.root if apivfs else None,
-          env=dict(ZYPP_CONF=str(state.pkgmngr / "etc/zypp/zypp.conf"), KERNEL_INSTALL_BYPASS="1") | state.config.environment)
-
-    fixup_rpmdb_location(state.root)
-
-
 def fetch_gpgurls(repourl: str) -> tuple[str, ...]:
     gpgurls = [f"{repourl}/repodata/repomd.xml.key"]
 
diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py
new file mode 100644 (file)
index 0000000..6304c0b
--- /dev/null
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: LGPL-2.1+
+import textwrap
+from collections.abc import Sequence
+
+from mkosi.installer.dnf import Repo, fixup_rpmdb_location
+from mkosi.run import bwrap
+from mkosi.state import MkosiState
+
+
+def setup_zypper(state: MkosiState, repos: Sequence[Repo]) -> None:
+    config = state.pkgmngr / "etc/zypp/zypp.conf"
+    if not config.exists():
+        config.parent.mkdir(exist_ok=True, parents=True)
+        with config.open("w") as f:
+            f.write(
+                textwrap.dedent(
+                    f"""\
+                    [main]
+                    rpm.install.excludedocs = {"no" if state.config.with_docs else "yes"}
+                    solver.onlyRequires = yes
+                    """
+                )
+            )
+
+    repofile = state.pkgmngr / "etc/zypp/repos.d/mkosi.repo"
+    if not repofile.exists():
+        repofile.parent.mkdir(exist_ok=True, parents=True)
+        with repofile.open("w") as f:
+            for repo in repos:
+                f.write(
+                    textwrap.dedent(
+                        f"""\
+                        [{repo.id}]
+                        name={repo.id}
+                        {repo.url}
+                        gpgcheck=1
+                        enabled={int(repo.enabled)}
+                        autorefresh=0
+                        keeppackages=1
+                        """
+                    )
+                )
+
+                for i, url in enumerate(repo.gpgurls):
+                    f.write("gpgkey=" if i == 0 else len("gpgkey=") * " ")
+                    f.write(f"{url}\n")
+
+
+def invoke_zypper(
+    state: MkosiState,
+    verb: str,
+    packages: Sequence[str],
+    options: Sequence[str] = (),
+    apivfs: bool = True,
+) -> None:
+    cmdline = [
+        "zypper",
+        f"--root={state.root}",
+        f"--cache-dir={state.cache_dir}",
+        f"--reposd-dir={state.pkgmngr / 'etc/zypp/repos.d'}",
+        "--gpg-auto-import-keys" if state.config.repository_key_check else "--no-gpg-checks",
+        "--non-interactive",
+        verb,
+        *options,
+        *packages,
+    ]
+
+    bwrap(cmdline,
+          apivfs=state.root if apivfs else None,
+          env=dict(ZYPP_CONF=str(state.pkgmngr / "etc/zypp/zypp.conf"), KERNEL_INSTALL_BYPASS="1") | state.config.environment)
+
+    fixup_rpmdb_location(state.root)