diff --git a/man/rules/meson.build b/man/rules/meson.build index e76cb0223b..7461398720 100644 --- a/man/rules/meson.build +++ b/man/rules/meson.build @@ -1093,7 +1093,10 @@ manpages = [ ['systemd-sysctl.service', '8', ['systemd-sysctl'], ''], ['systemd-sysext', '8', - ['systemd-confext', 'systemd-confext.service', 'systemd-sysext.service'], + ['systemd-confext', + 'systemd-confext-initrd.service', + 'systemd-confext.service', + 'systemd-sysext.service'], 'ENABLE_SYSEXT'], ['systemd-system-update-generator', '8', [], ''], ['systemd-system.conf', diff --git a/man/systemd-sysext.xml b/man/systemd-sysext.xml index b196503cd9..9f78b3b214 100644 --- a/man/systemd-sysext.xml +++ b/man/systemd-sysext.xml @@ -21,6 +21,7 @@ systemd-sysext.service systemd-confext systemd-confext.service + systemd-confext-initrd.service Activates System Extension Images diff --git a/units/meson.build b/units/meson.build index 96f4852741..bc71c72686 100644 --- a/units/meson.build +++ b/units/meson.build @@ -287,6 +287,11 @@ units = [ 'file' : 'systemd-confext.service', 'conditions' : ['ENABLE_SYSEXT'], }, + { + 'file' : 'systemd-confext-initrd.service', + 'conditions' : ['ENABLE_INITRD', 'ENABLE_SYSEXT'], + 'symlinks' : ['initrd.target.wants/'], + }, { 'file' : 'systemd-coredump.socket', 'conditions' : ['ENABLE_COREDUMP'], diff --git a/units/systemd-confext-initrd.service b/units/systemd-confext-initrd.service new file mode 100644 index 0000000000..4655018567 --- /dev/null +++ b/units/systemd-confext-initrd.service @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Merge System Configuration Images into /etc/ +Documentation=man:systemd-confext-initrd.service(8) + +ConditionCapability=CAP_SYS_ADMIN +ConditionDirectoryNotEmpty=|/run/confexts +ConditionDirectoryNotEmpty=|/var/lib/confexts +ConditionDirectoryNotEmpty=|/usr/local/lib/confexts +ConditionDirectoryNotEmpty=|/usr/lib/confexts +ConditionDirectoryNotEmpty=|/.extra/confext +ConditionPathExists=/etc/initrd-release + +DefaultDependencies=no +Before=local-fs-pre.target cryptsetup-pre.target systemd-tmpfiles-setup.service +Wants=local-fs-pre.target cryptsetup-pre.target +Conflicts=initrd-switch-root.target +Before=initrd-switch-root.target +Wants=modprobe@loop.service modprobe@dm_mod.service modprobe@squashfs.service modprobe@erofs.service +After=modprobe@loop.service modprobe@dm_mod.service modprobe@squashfs.service modprobe@erofs.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=systemd-confext refresh +ExecReload=systemd-confext refresh +ExecStop=systemd-confext unmerge diff --git a/units/systemd-confext.service b/units/systemd-confext.service index cd5e0f295f..e509036d03 100644 --- a/units/systemd-confext.service +++ b/units/systemd-confext.service @@ -16,13 +16,13 @@ ConditionDirectoryNotEmpty=|/run/confexts ConditionDirectoryNotEmpty=|/var/lib/confexts ConditionDirectoryNotEmpty=|/usr/local/lib/confexts ConditionDirectoryNotEmpty=|/usr/lib/confexts -ConditionDirectoryNotEmpty=|/.extra/confext +ConditionPathExists=!/etc/initrd-release DefaultDependencies=no After=local-fs.target Before=sysinit.target systemd-tmpfiles-setup.service -Conflicts=shutdown.target initrd-switch-root.target -Before=shutdown.target initrd-switch-root.target +Conflicts=shutdown.target +Before=shutdown.target [Service] Type=oneshot