]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Allow adding extra tools tree configuration via mkosi.tools.conf 3636/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 31 Mar 2025 12:37:27 +0000 (14:37 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 31 Mar 2025 13:39:20 +0000 (15:39 +0200)
Instead of adding ever more ToolsTreeXXX= settings, let's allow
adding extra tools tree configuration via mkosi.tools.conf which can
be either a file or a directory containing extra configuration for the
default tools tree.

mkosi.tools.conf/mkosi.conf [moved from mkosi.conf.d/40-tools/mkosi.conf with 73% similarity]
mkosi.tools.conf/mkosi.conf.d/arch.conf [moved from mkosi.conf.d/40-tools/mkosi.conf.d/arch.conf with 72% similarity]
mkosi.tools.conf/mkosi.conf.d/azure-centos-fedora.conf [moved from mkosi.conf.d/40-tools/mkosi.conf.d/azure-centos-fedora.conf with 50% similarity]
mkosi.tools.conf/mkosi.conf.d/debian-kali-ubuntu.conf [moved from mkosi.conf.d/40-tools/mkosi.conf.d/debian-kali-ubuntu.conf with 55% similarity]
mkosi.tools.conf/mkosi.conf.d/fedora.conf [moved from mkosi.conf.d/40-tools/mkosi.conf.d/fedora.conf with 61% similarity]
mkosi.tools.conf/mkosi.conf.d/opensuse.conf [moved from mkosi.conf.d/40-tools/mkosi.conf.d/opensuse.conf with 80% similarity]
mkosi/config.py
mkosi/resources/man/mkosi.1.md
tests/test_config.py

similarity index 73%
rename from mkosi.conf.d/40-tools/mkosi.conf
rename to mkosi.tools.conf/mkosi.conf
index 4eef1de8c7be888d9d19777b0d87601973b75437..31dbbd53aad98fa5eaea310949fd2813b7db703f 100644 (file)
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         gnupg
         lvm2
similarity index 72%
rename from mkosi.conf.d/40-tools/mkosi.conf.d/arch.conf
rename to mkosi.tools.conf/mkosi.conf.d/arch.conf
index 48805ca3c8b5fea98bfa2255fc139c081573e47f..c7b6bf0011a1af33558a7d69b7d4b0f075ef5ae9 100644 (file)
@@ -1,10 +1,10 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 [Match]
-ToolsTreeDistribution=arch
+Distribution=arch
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         cryptsetup
         mypy
         python-pytest
similarity index 50%
rename from mkosi.conf.d/40-tools/mkosi.conf.d/azure-centos-fedora.conf
rename to mkosi.tools.conf/mkosi.conf.d/azure-centos-fedora.conf
index a49ef929de5523bf38dc9c3f227433aa5df269f6..c2256624c7a52dc81fdd9609ed71db02ccd63893 100644 (file)
@@ -1,12 +1,12 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 [Match]
-ToolsTreeDistribution=|azure
-ToolsTreeDistribution=|centos
-ToolsTreeDistribution=|fedora
+Distribution=|azure
+Distribution=|centos
+Distribution=|fedora
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         cryptsetup
         python3-mypy
         python3-pytest
similarity index 55%
rename from mkosi.conf.d/40-tools/mkosi.conf.d/debian-kali-ubuntu.conf
rename to mkosi.tools.conf/mkosi.conf.d/debian-kali-ubuntu.conf
index 85ebe3019c01fd6248e0f3ea84d113957ed0b0d2..ba02e0d14fe37ccf05e286eab6caaf938a02dbef 100644 (file)
@@ -1,12 +1,12 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 [Match]
-ToolsTreeDistribution=|debian
-ToolsTreeDistribution=|kali
-ToolsTreeDistribution=|ubuntu
+Distribution=|debian
+Distribution=|kali
+Distribution=|ubuntu
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         cryptsetup-bin
         fdisk
         mypy
similarity index 61%
rename from mkosi.conf.d/40-tools/mkosi.conf.d/fedora.conf
rename to mkosi.tools.conf/mkosi.conf.d/fedora.conf
index 0ec19244c9e74151c9dccd6bf13c91e7c13a8b8e..0247e1389d6107f28ee97e1a61851b34a607f451 100644 (file)
@@ -1,9 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 [Match]
-ToolsTreeDistribution=fedora
+Distribution=fedora
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         ruff
         sequoia-sop
similarity index 80%
rename from mkosi.conf.d/40-tools/mkosi.conf.d/opensuse.conf
rename to mkosi.tools.conf/mkosi.conf.d/opensuse.conf
index 2a7cd1118e06ad172841046b3b3c5be21519c833..f764b41412a8ac6874f82a0d04363f567fb9b305 100644 (file)
@@ -1,10 +1,10 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 [Match]
-ToolsTreeDistribution=opensuse
+Distribution=opensuse
 
-[Build]
-ToolsTreePackages=
+[Content]
+Packages=
         cryptsetup
         grub2 # TODO: Move to default tools tree when https://bugzilla.opensuse.org/show_bug.cgi?id=1227464 is resolved.
         mypy
index 2cabd3a18b5ff42c8283b663acab627da2602e70..72a7e61641a1826cb9f2b532f2730e5c594bd496 100644 (file)
@@ -4951,6 +4951,10 @@ def finalize_default_tools(main: ParseContext, finalized: dict[str, Any], *, res
         for name in finalized.get("environment", {}).keys() & finalized.get("pass_environment", [])
     }
 
+    if (p := Path("mkosi.tools.conf").absolute()).exists():
+        with chdir(p if p.is_dir() else Path.cwd()):
+            context.parse_config_one(p, parse_profiles=p.is_dir(), parse_local=p.is_dir())
+
     with chdir(resources / "mkosi-tools"):
         context.parse_config_one(resources / "mkosi-tools", parse_profiles=True)
 
index b7992f163c8b25e8b8ccdd2d896ab5ca283752ff..66084b164c11468586d25f7cb897aac4d9a32158 100644 (file)
@@ -1316,7 +1316,9 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`,
     any of the extra search paths.
 
     If set to `default`, **mkosi** will automatically add an extra tools tree
-    image and use it as the tools tree.
+    image and use it as the tools tree. This image can be further configured
+    using the settings below or with `mkosi.tools.conf` which can either be a
+    file or directory containing extra configuration for the default tools tree.
 
     The following table shows for which distributions default tools tree
     packages are defined and which packages are included in those default
index 0f838e4d74774c5f79d6f7482946a91860599abb..5d93c78ba2f8b779f77a4a6edd8a2d96f6adbc7e 100644 (file)
@@ -9,6 +9,7 @@ from pathlib import Path
 
 import pytest
 
+import mkosi.resources
 from mkosi import expand_kernel_specifiers
 from mkosi.config import (
     Architecture,
@@ -24,7 +25,7 @@ from mkosi.config import (
     parse_ini,
 )
 from mkosi.distributions import Distribution, detect_distribution
-from mkosi.util import chdir
+from mkosi.util import chdir, resource_path
 
 
 def test_compression_enum_creation() -> None:
@@ -1413,3 +1414,53 @@ def test_cli_collection_reset(tmp_path: Path) -> None:
 
         _, _, [config] = parse_config(["--package", "foo", "--package", ""])
         assert config.packages == []
+
+
+def test_tools(tmp_path: Path) -> None:
+    d = tmp_path
+    argv = ["--tools-tree=default"]
+
+    with resource_path(mkosi.resources) as resources, chdir(d):
+        _, tools, _ = parse_config(argv, resources=resources)
+        assert tools
+        host = detect_distribution()[0]
+        assert host
+        assert tools.distribution == host.default_tools_tree_distribution()
+
+        (d / "mkosi.tools.conf").write_text(
+            f"""
+            [Distribution]
+            Distribution=debian
+
+            [Content]
+            PackageDirectories={d}
+            """
+        )
+
+        _, tools, _ = parse_config(argv, resources=resources)
+        assert tools
+        assert tools.distribution == Distribution.debian
+        assert tools.package_directories == [Path(d)]
+
+        _, tools, _ = parse_config(
+            argv + ["--tools-tree-distribution=arch", "--tools-tree-package-directory=/tmp"],
+            resources=resources,
+        )
+        assert tools
+        assert tools.distribution == Distribution.arch
+        assert tools.package_directories == [Path(d), Path("/tmp")]
+
+        _, tools, _ = parse_config(argv + ["--tools-tree-package-directory="], resources=resources)
+        assert tools
+        assert tools.package_directories == []
+
+        (d / "mkosi.conf").write_text(
+            """
+            [Build]
+            ToolsTreeDistribution=arch
+            """
+        )
+
+        _, tools, _ = parse_config(argv, resources=resources)
+        assert tools
+        assert tools.distribution == Distribution.debian