diff --git a/stages/org.osbuild.systemd b/stages/org.osbuild.systemd index ffe875f0..994e3a71 100755 --- a/stages/org.osbuild.systemd +++ b/stages/org.osbuild.systemd @@ -24,6 +24,7 @@ the following subset of options: - 'Environment' option """ +import os import subprocess import sys @@ -47,6 +48,11 @@ SCHEMA = r""" "items": { "type": "string" }, "description": "Array of systemd unit names to be masked" }, + "masked_generators": { + "type": "array", + "items": { "type": "string" }, + "description": "Array of systemd generators to be masked" + }, "default_target": { "type": "string", "description": "The default target to boot into" @@ -59,6 +65,7 @@ def main(tree, options): enabled_services = options.get("enabled_services", []) disabled_services = options.get("disabled_services", []) masked_services = options.get("masked_services", []) + masked_generators = options.get("masked_generators", []) default_target = options.get("default_target") for service in enabled_services: @@ -70,6 +77,14 @@ def main(tree, options): for service in masked_services: subprocess.run(["systemctl", "--root", tree, "mask", service], check=True) + if masked_generators: + # systemctl can't mask generators, so manually create the mask + generator_dir = f"{tree}/etc/systemd/system-generators" + os.makedirs(generator_dir, exist_ok=True) + for generator in masked_generators: + target = os.path.join(generator_dir, generator) + os.symlink("/dev/null", target) + if default_target: subprocess.run(["systemctl", "--root", tree, "set-default", default_target], check=True) diff --git a/test/data/stages/systemd/b.json b/test/data/stages/systemd/b.json index 36ecccfe..81ba3d17 100644 --- a/test/data/stages/systemd/b.json +++ b/test/data/stages/systemd/b.json @@ -649,6 +649,9 @@ "masked_services": [ "ldconfig" ], + "masked_generators": [ + "systemd-sysv-generator" + ], "disabled_services": [ "sshd" ] diff --git a/test/data/stages/systemd/b.mpp.yaml b/test/data/stages/systemd/b.mpp.yaml index 46824df2..d8b00250 100644 --- a/test/data/stages/systemd/b.mpp.yaml +++ b/test/data/stages/systemd/b.mpp.yaml @@ -35,5 +35,7 @@ pipelines: - nftables masked_services: - ldconfig + masked_generators: + - systemd-sysv-generator disabled_services: - sshd diff --git a/test/data/stages/systemd/diff.json b/test/data/stages/systemd/diff.json index 7ceb776c..78328693 100644 --- a/test/data/stages/systemd/diff.json +++ b/test/data/stages/systemd/diff.json @@ -1,7 +1,9 @@ { "added_files": [ "/etc/systemd/system/ldconfig.service", - "/etc/systemd/system/multi-user.target.wants/nftables.service" + "/etc/systemd/system/multi-user.target.wants/nftables.service", + "/etc/systemd/system-generators", + "/etc/systemd/system-generators/systemd-sysv-generator" ], "deleted_files": [ "/etc/systemd/system/multi-user.target.wants/sshd.service"