]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Only set some environment variables when invoking package managers
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 20 Mar 2024 08:13:16 +0000 (09:13 +0100)
committerJörg Behrmann <behrmann@physik.fu-berlin.de>
Wed, 20 Mar 2024 13:35:26 +0000 (14:35 +0100)
We really only want to set KERNEL_INSTALL_BYPASS and
SYSTEMD_HWDB_UPDATE_BYPASS when we're invoking package managers so
let's make sure those are only set when invoking package managers.

Let's also allow users to override both all of these and let's not
set them when Bootable=no so distros can do whatever they want if
mkosi's bootable image logic is not being used.

mkosi/config.py
mkosi/installer/__init__.py
mkosi/installer/apt.py
mkosi/installer/dnf.py
mkosi/installer/pacman.py
mkosi/installer/zypper.py

index c80d507d35aa1bbb6241b2edbb1a7c54828fd97c..d100dd34657865c95f4867d3bbfb67b3eee37cbf 100644 (file)
@@ -3484,8 +3484,6 @@ def load_kernel_command_line_extra(args: argparse.Namespace) -> list[str]:
 def load_environment(args: argparse.Namespace) -> dict[str, str]:
     env = {
         "SYSTEMD_TMPFILES_FORCE_SUBVOL": "0",
-        "KERNEL_INSTALL_BYPASS": "1",
-        "SYSTEMD_HWDB_UPDATE_BYPASS": "1",
         "TERM": finalize_term(),
     }
 
index 04340b4275095b911659548f041d81de5856749b..10906108bd00bd53fcbc327692fbfba85a30b54f 100644 (file)
@@ -28,6 +28,23 @@ class PackageManager:
     def scripts(cls, context: Context) -> dict[str, list[PathString]]:
         return {}
 
+    @classmethod
+    def finalize_environment(cls, context: Context) -> dict[str, str]:
+        env = {
+            "HOME": "/", # Make sure rpm doesn't pick up ~/.rpmmacros and ~/.rpmrc.
+        }
+
+        if "SYSTEMD_HWDB_UPDATE_BYPASS" not in context.config.environment:
+            env["SYSTEMD_HWDB_UPDATE_BYPASS"] = "1"
+
+        if (
+            "KERNEL_INSTALL_BYPASS" not in context.config.environment and
+            context.config.bootable != ConfigFeature.disabled
+        ):
+            env["KERNEL_INSTALL_BYPASS"] = "1"
+
+        return env
+
     @classmethod
     def mounts(cls, context: Context) -> list[Mount]:
         mounts = [
index fab81a8eccf3f27633f97d07f40c0c2b65c034c9..c8c007857774d0318e45bb0057d7b2db724a0257 100644 (file)
@@ -5,7 +5,7 @@ from collections.abc import Iterable, Sequence
 from pathlib import Path
 from typing import NamedTuple, Optional
 
-from mkosi.config import Config
+from mkosi.config import Config, ConfigFeature
 from mkosi.context import Context
 from mkosi.installer import PackageManager
 from mkosi.log import die
@@ -110,16 +110,26 @@ class Apt(PackageManager):
                 for repo in repos:
                     f.write(str(repo))
 
+    @classmethod
+    def finalize_environment(cls, context: Context) -> dict[str, str]:
+        env = {
+            "APT_CONFIG": "/etc/apt.conf",
+            "DEBIAN_FRONTEND" : "noninteractive",
+            "DEBCONF_INTERACTIVE_SEEN": "true",
+        }
+
+        if "INITRD" not in context.config.environment and context.config.bootable != ConfigFeature.disabled:
+            env["INITRD"] = "No"
+
+        return super().finalize_environment(context) | env
+
     @classmethod
     def cmd(cls, context: Context, command: str) -> list[PathString]:
         debarch = context.config.distribution.architecture(context.config.architecture)
 
         cmdline: list[PathString] = [
             "env",
-            "APT_CONFIG=/etc/apt.conf",
-            "DEBIAN_FRONTEND=noninteractive",
-            "DEBCONF_INTERACTIVE_SEEN=true",
-            "INITRD=No",
+            *([f"{k}={v}" for k, v in cls.finalize_environment(context).items()]),
             command,
             "-o", f"APT::Architecture={debarch}",
             "-o", f"APT::Architectures={debarch}",
index 2344ec926767a725d79981ccbf7209de340f62cf..0c17e8776393c08d97f9fcbbe2d5b5a7bab2ba7c 100644 (file)
@@ -100,7 +100,7 @@ class Dnf(PackageManager):
 
         cmdline: list[PathString] = [
             "env",
-            "HOME=/", # Make sure rpm doesn't pick up ~/.rpmmacros and ~/.rpmrc.
+            *([f"{k}={v}" for k, v in cls.finalize_environment(context).items()]),
             dnf,
             "--assumeyes",
             "--best",
index e700cd8f6e53d53de887a85e8cf6f612d54133ef..58a2b99d4443534a9ae89c85392ab6524f9368cc 100644 (file)
@@ -127,6 +127,8 @@ class Pacman(PackageManager):
     @classmethod
     def cmd(cls, context: Context) -> list[PathString]:
         return [
+            "env",
+            *([f"{k}={v}" for k, v in cls.finalize_environment(context).items()]),
             "pacman",
             "--root=/buildroot",
             "--logfile=/dev/null",
index 329059b9ecabf3bd54b1010971ab46ea5e3ccbac..eb707d2445dc4e220ebdd5ba887d8de45257deba 100644 (file)
@@ -98,12 +98,15 @@ class Zypper(PackageManager):
 
                     f.write("\n")
 
+    @classmethod
+    def finalize_environment(cls, context: Context) -> dict[str, str]:
+        return super().finalize_environment(context) | {"ZYPP_CONF": "/etc/zypp/zypp.conf"}
+
     @classmethod
     def cmd(cls, context: Context) -> list[PathString]:
         return [
             "env",
-            "ZYPP_CONF=/etc/zypp/zypp.conf",
-            "HOME=/",
+            *([f"{k}={v}" for k, v in cls.finalize_environment(context).items()]),
             "zypper",
             "--installroot=/buildroot",
             "--cache-dir=/var/cache/zypp",